/**
* 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.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.Rect;
import android.text.StaticLayout;
import android.text.TextPaint;
import android.text.TextUtils;
import android.util.AttributeSet;
import com.galaxy.meetup.client.android.R;
import com.galaxy.meetup.client.util.ImageUtils;
import com.galaxy.meetup.client.util.TextPaintUtils;
import com.galaxy.meetup.server.client.domain.PlaceReview;
import com.galaxy.meetup.server.client.util.JsonUtil;
/**
*
* @author sihai
*
*/
public class PlaceReviewCardView extends StreamCardView {
private static Paint sDividerPaint;
private static int sDividerYPadding;
private static Bitmap sLocationBitmap;
private static int sLocationIconPadding;
private static boolean sPlaceReviewCardInitialized;
private static int sPostLocationYPadding;
private float mDividerY;
private Rect mLocationIconRect;
private StaticLayout mLocationLayout;
private Point mLocationLayoutCorner;
private PlaceReview mReview;
private StaticLayout mReviewBodyLayout;
private boolean mWrapContent;
public PlaceReviewCardView(Context context)
{
this(context, null);
}
public PlaceReviewCardView(Context context, AttributeSet attributeset)
{
super(context, attributeset);
mDividerY = -1F;
if(!sPlaceReviewCardInitialized)
{
Resources resources = context.getResources();
sLocationBitmap = ImageUtils.decodeResource(resources, R.drawable.icn_location_card);
sPlaceReviewCardInitialized = true;
Paint paint = new Paint();
sDividerPaint = paint;
paint.setColor(resources.getColor(R.color.card_place_review_divider));
sDividerPaint.setStrokeWidth(resources.getDimension(R.dimen.card_place_review_divider_stroke_width));
sPostLocationYPadding = resources.getDimensionPixelOffset(R.dimen.card_place_review_post_location_y_padding);
sLocationIconPadding = resources.getDimensionPixelOffset(R.dimen.card_place_review_location_icon_padding);
sDividerYPadding = resources.getDimensionPixelOffset(R.dimen.card_place_review_divider_y_padding);
}
mLocationIconRect = new Rect();
mLocationLayoutCorner = new Point();
}
protected final int draw(Canvas canvas, int i, int j, int k, int l)
{
drawAuthorImage(canvas);
int i1 = i + (sAvatarSize + sContentXPadding);
int j1 = k - (sAvatarSize + sContentXPadding);
int k1 = drawAuthorName(canvas, i1, j);
if(mRelativeTimeLayout != null)
drawRelativeTimeLayout(canvas, (i1 + j1) - mRelativeTimeLayout.getWidth(), k1 - mRelativeTimeLayout.getHeight() - sRelativeTimeYOffset);
int l1 = k1 + sContentYPadding;
if(mContentLayout != null)
{
canvas.translate(i1, l1);
mContentLayout.draw(canvas);
canvas.translate(-i1, -l1);
l1 += mContentLayout.getHeight() + sContentYPadding;
}
if(mAutoTextLayout != null)
{
canvas.translate(i1, l1);
mAutoTextLayout.draw(canvas);
canvas.translate(-i1, -l1);
l1 += mAutoTextLayout.getHeight() + sContentYPadding;
}
if(mDividerY != -1F)
canvas.drawLine(i1, mDividerY, i1 + j1, mDividerY, sDividerPaint);
if(mLocationLayout != null)
{
int i2 = Math.max(mLocationIconRect.bottom, mLocationLayout.getHeight() + mLocationLayoutCorner.y);
if(i2 <= l || mWrapContent)
{
canvas.translate(mLocationLayoutCorner.x, mLocationLayoutCorner.y);
mLocationLayout.draw(canvas);
canvas.translate(-mLocationLayoutCorner.x, -mLocationLayoutCorner.y);
canvas.drawBitmap(sLocationBitmap, null, mLocationIconRect, null);
l1 = i2 + sPostLocationYPadding;
}
}
if(mReviewBodyLayout != null)
{
canvas.translate(i1, l1);
mReviewBodyLayout.draw(canvas);
canvas.translate(-i1, -l1);
mReviewBodyLayout.getHeight();
int _tmp = sContentYPadding;
}
drawPlusOneBar(canvas);
drawCornerIcon(canvas);
return l;
}
public final void init(Cursor cursor, int i, int j, android.view.View.OnClickListener onclicklistener, ItemClickListener itemclicklistener, StreamCardView.ViewedListener viewedlistener, StreamCardView.StreamPlusBarClickListener streamplusbarclicklistener,
StreamCardView.StreamMediaClickListener streammediaclicklistener)
{
super.init(cursor, i, j, onclicklistener, itemclicklistener, viewedlistener, streamplusbarclicklistener, streammediaclicklistener);
byte abyte0[] = cursor.getBlob(24);
if(abyte0 != null)
mReview = (PlaceReview)JsonUtil.fromByteArray(abyte0, PlaceReview.class);
}
protected final int layoutElements(int i, int j, int k, int l)
{
createPlusOneBar(i, j + l, k);
int i1 = l - mPlusOneButton.getRect().height();
setAuthorImagePosition(i, j);
int j1 = i + (sAvatarSize + sContentXPadding);
int k1 = k - (sAvatarSize + sContentXPadding);
int l1 = createAuthorNameAndRelativeTimeLayoutOnSameLine(j, k1) + sContentYPadding;
int j2;
int k2;
String s;
Rect rect;
if(!TextUtils.isEmpty(mContent))
{
int j3 = (i1 - l1) / (int)(sDefaultTextPaint.descent() - sDefaultTextPaint.ascent());
if(j3 > 0)
{
mContentLayout = TextPaintUtils.createConstrainedStaticLayout(sDefaultTextPaint, mContent, k1, j3);
l1 += mContentLayout.getHeight();
}
} else
if(mAutoText != 0)
{
int i2 = (i1 - l1) / (int)(sAutoTextPaint.descent() - sAutoTextPaint.ascent());
if(i2 > 0)
{
mAutoTextLayout = TextPaintUtils.createConstrainedStaticLayout(sAutoTextPaint, getResources().getString(mAutoText), k1, i2);
l1 += mAutoTextLayout.getHeight();
}
}
j2 = l1 + sDividerYPadding;
mDividerY = j2;
k2 = j2 + sDividerYPadding;
if(!TextUtils.isEmpty(mReview.name))
s = mReview.name;
else
s = null;
if(s != null)
{
Bitmap bitmap = sLocationBitmap;
Rect rect1 = mLocationIconRect;
int i3 = sLocationIconPadding;
Point point = mLocationLayoutCorner;
TextPaint textpaint = sDefaultTextPaint;
mLocationLayout = TextPaintUtils.layoutBitmapTextLabel(j1, k2, k1, 0, bitmap, rect1, i3, s, point, textpaint, true);
k2 += mLocationLayout.getHeight() + sPostLocationYPadding;
}
if(!TextUtils.isEmpty(mReview.reviewBody))
{
int l2 = (i1 - k2) / (int)(sDefaultTextPaint.descent() - sDefaultTextPaint.ascent());
if(l2 > 0)
{
mReviewBodyLayout = TextPaintUtils.createConstrainedStaticLayout(sDefaultTextPaint, mReview.reviewBody, k1, l2);
k2 += mReviewBodyLayout.getHeight() + sContentYPadding;
}
}
rect = mPlusOneButton.getRect();
if(mWrapContent)
{
rect.offsetTo(rect.left, k2);
if(mReshareButton != null)
{
rect = mReshareButton.getRect();
rect.offsetTo(rect.left, k2);
}
if(mCommentsButton != null)
{
rect = mCommentsButton.getRect();
rect.offsetTo(rect.left, k2);
}
}
return rect.bottom;
}
protected void onMeasure(int i, int j)
{
int k = android.view.View.MeasureSpec.getSize(i);
int l = android.view.View.MeasureSpec.getSize(j);
mWrapContent = shouldWrapContent(j);
int i1;
boolean flag;
int j1;
int k1;
int l1;
int i2;
int j2;
if(mWrapContent)
i1 = k;
else
i1 = l;
flag = mPaddingEnabled;
j1 = 0;
k1 = 0;
l1 = 0;
i2 = 0;
if(flag)
{
k1 = sXPadding;
i2 = sYPadding;
j1 = sXDoublePadding;
l1 = sYDoublePadding;
}
j2 = layoutElements(k1 + sLeftBorderPadding, i2 + sTopBorderPadding, k - (j1 + sLeftBorderPadding + sRightBorderPadding), i1 - (l1 + sTopBorderPadding + sBottomBorderPadding));
if(mWrapContent)
setMeasuredDimension(k, l1 + (j2 + sTopBorderPadding) + sBottomBorderPadding);
else
setMeasuredDimension(k, i1);
mBackgroundRect.set(0, 0, getMeasuredWidth(), getMeasuredHeight());
}
public void onRecycle()
{
super.onRecycle();
mWrapContent = false;
mLocationLayout = null;
mLocationIconRect.setEmpty();
mLocationLayoutCorner.set(0, 0);
mReviewBodyLayout = null;
}
}