/**
* galaxy inc.
* meetup client for android
*/
package com.galaxy.meetup.client.util;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.content.res.Resources;
import android.database.ContentObserver;
import android.graphics.Bitmap;
import android.graphics.Point;
import android.graphics.Rect;
import android.os.Handler;
import android.os.Looper;
import android.text.SpannableStringBuilder;
import android.text.StaticLayout;
import android.text.TextPaint;
import android.text.TextUtils;
import android.util.Pair;
/**
*
* @author sihai
*
*/
public class TextPaintUtils {
private static ContentObserver sFontSizeObserver;
private static final List sTextPaintsAndSizeResIds = new ArrayList();
public static StaticLayout createConstrainedStaticLayout(TextPaint textpaint, CharSequence charsequence, int i, int j)
{
return createConstrainedStaticLayout(textpaint, charsequence, i, j, android.text.Layout.Alignment.ALIGN_NORMAL);
}
public static StaticLayout createConstrainedStaticLayout(TextPaint textpaint, CharSequence charsequence, int i, int j, android.text.Layout.Alignment alignment)
{
int k = Math.max(i, 0);
CharSequence txt = null;
if(0 == j) {
txt = "";
} else if(1 == j) {
txt = smartEllipsize(charsequence, textpaint, k, android.text.TextUtils.TruncateAt.END);
} else {
StaticLayout staticlayout = new StaticLayout(charsequence, textpaint, k, alignment, 1.0F, 0.0F, false);
if(staticlayout.getLineCount() <= j) {
return staticlayout;
}
int l = staticlayout.getLineEnd(j - 2);
SpannableStringBuilder spannablestringbuilder = new SpannableStringBuilder(charsequence.subSequence(0, l));
spannablestringbuilder.append(smartEllipsize(charsequence.subSequence(l, charsequence.length()), textpaint, k, android.text.TextUtils.TruncateAt.END));
txt = spannablestringbuilder;
}
return new StaticLayout(((CharSequence) (txt)), textpaint, k, alignment, 1.0F, 0.0F, false);
}
public static void init(Context context)
{
if(sFontSizeObserver == null)
{
final Resources resources = context.getResources();
sFontSizeObserver = new ContentObserver(new Handler(Looper.getMainLooper())) {
public final void onChange(boolean flag)
{
int i = 0;
for(int j = TextPaintUtils.sTextPaintsAndSizeResIds.size(); i < j; i++)
{
Pair pair = (Pair)TextPaintUtils.sTextPaintsAndSizeResIds.get(i);
((TextPaint)pair.first).setTextSize(resources.getDimension(((Integer)pair.second).intValue()));
}
}
};
context.getContentResolver().registerContentObserver(android.provider.Settings.System.getUriFor("font_scale"), false, sFontSizeObserver);
}
}
public static StaticLayout layoutBitmapTextLabel(int i, int j, int k, int l, Bitmap bitmap, Rect rect, int i1, CharSequence charsequence,
Point point, TextPaint textpaint, boolean flag)
{
point.set(i, j);
if(bitmap != null)
{
int j2 = i1 + bitmap.getWidth();
k -= j2;
rect.set(i, j, i + bitmap.getWidth(), j + bitmap.getHeight());
point.set(j2 + point.x, point.y);
}
CharSequence charsequence1;
Object obj;
StaticLayout staticlayout;
int j1;
int k1;
int l1;
int i2;
if(flag)
charsequence1 = TextUtils.ellipsize(charsequence, textpaint, k, android.text.TextUtils.TruncateAt.END);
else
charsequence1 = charsequence;
if(k <= 0)
obj = "";
else
obj = charsequence1;
staticlayout = new StaticLayout(((CharSequence) (obj)), textpaint, Math.max(k, 0), android.text.Layout.Alignment.ALIGN_NORMAL, 1.0F, 0.0F, false);
j1 = Math.max(0, staticlayout.getHeight());
if(bitmap != null)
k1 = bitmap.getHeight();
else
k1 = 0;
l1 = Math.max(j1, k1);
if(bitmap != null)
rect.offset(0, Math.abs(l1 - bitmap.getHeight()) / 2);
i2 = Math.abs(l1 - staticlayout.getHeight()) / 2;
point.set(point.x, i2 + point.y);
return staticlayout;
}
public static void registerTextPaint(TextPaint textpaint, int i)
{
sTextPaintsAndSizeResIds.add(new Pair(textpaint, Integer.valueOf(i)));
}
public static CharSequence smartEllipsize(CharSequence charsequence, TextPaint textpaint, int i, android.text.TextUtils.TruncateAt truncateat)
{
String s = charsequence.toString();
int j = s.indexOf('\r');
int k = s.indexOf('\n');
CharSequence charsequence1;
if(j == -1 && k == -1)
charsequence1 = charsequence;
else
if(j == -1)
charsequence1 = charsequence.subSequence(0, k);
else
if(k == -1)
charsequence1 = charsequence.subSequence(0, j);
else
charsequence1 = charsequence.subSequence(0, Math.min(j, k));
return TextUtils.ellipsize(charsequence1, textpaint, i, truncateat);
}
}