/** * galaxy inc. * meetup client for android */ package com.galaxy.meetup.client.android.ui.view; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.content.res.Resources; import android.database.Cursor; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.graphics.drawable.NinePatchDrawable; import android.text.TextPaint; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import com.galaxy.meetup.client.android.R; import com.galaxy.meetup.client.android.common.Recyclable; import com.galaxy.meetup.client.android.service.Resource; import com.galaxy.meetup.client.android.service.ResourceConsumer; import com.galaxy.meetup.client.util.TextPaintUtils; import com.galaxy.meetup.client.util.ViewUtils; /** * * @author sihai * */ public abstract class CardView extends View implements ResourceConsumer, Recyclable { protected static NinePatchDrawable sBackground; protected static int sBottomBorderPadding; private static boolean sCardViewInitialized; protected static TextPaint sDefaultTextPaint; protected static Rect sDrawRect; protected static int sLeftBorderPadding; protected static Drawable sPressedStateBackground; protected static final Paint sResizePaint = new Paint(2); protected static int sRightBorderPadding; protected static int sTopBorderPadding; protected static int sXDoublePadding; protected static int sXPadding; protected static int sYDoublePadding; protected static int sYPadding; protected Rect mBackgroundRect; private final List mClickableItems; private ClickableItem mCurrentClickableItem; protected int mDisplaySizeType; protected ItemClickListener mItemClickListener; private android.view.View.OnClickListener mOnClickListener; protected boolean mPaddingEnabled; public CardView(Context context) { this(context, null); } public CardView(Context context, AttributeSet attributeset) { this(context, attributeset, 0); } public CardView(Context context, AttributeSet attributeset, int i) { super(context, attributeset, i); mDisplaySizeType = -2; mClickableItems = new ArrayList(); mPaddingEnabled = true; if(!sCardViewInitialized) { sCardViewInitialized = true; Resources resources = context.getResources(); TextPaint textpaint = new TextPaint(); sDefaultTextPaint = textpaint; textpaint.setAntiAlias(true); sDefaultTextPaint.setColor(resources.getColor(R.color.card_default_text)); sDefaultTextPaint.setTextSize(resources.getDimension(R.dimen.card_default_text_size)); sDefaultTextPaint.linkColor = resources.getColor(R.color.card_link); TextPaintUtils.registerTextPaint(sDefaultTextPaint, R.dimen.card_default_text_size); sBackground = (NinePatchDrawable)resources.getDrawable(R.drawable.bg_tacos); sPressedStateBackground = resources.getDrawable(R.drawable.list_selected_holo); sLeftBorderPadding = (int)resources.getDimension(R.dimen.card_border_left_padding); sRightBorderPadding = (int)resources.getDimension(R.dimen.card_border_right_padding); sTopBorderPadding = (int)resources.getDimension(R.dimen.card_border_top_padding); sBottomBorderPadding = (int)resources.getDimension(R.dimen.card_border_bottom_padding); int j = (int)resources.getDimension(R.dimen.card_x_padding); sXPadding = j; sXDoublePadding = j * 2; int k = (int)resources.getDimension(R.dimen.card_y_padding); sYPadding = k; sYDoublePadding = k * 2; sDrawRect = new Rect(); } mBackgroundRect = new Rect(); } protected static boolean shouldWrapContent(int i) { boolean flag; if(android.view.View.MeasureSpec.getMode(i) == 0) flag = true; else flag = false; return flag; } public final void addClickableItem(ClickableItem clickableitem) { if(clickableitem != null) { mClickableItems.remove(clickableitem); mClickableItems.add(clickableitem); } } public final void bindResources() { if(ViewUtils.isViewAttached(this)) onBindResources(); } public boolean dispatchTouchEvent(MotionEvent motionevent) { boolean flag; int i; int j; flag = true; i = (int)motionevent.getX(); j = (int)motionevent.getY(); switch(motionevent.getAction()) { case 0: int l = -1 + mClickableItems.size(); do { if(l < 0) break; ClickableItem clickableitem = (ClickableItem)mClickableItems.get(l); if(clickableitem.handleEvent(i, j, 0)) { mCurrentClickableItem = clickableitem; invalidate(); break; } l--; } while(true); break; case 1: mCurrentClickableItem = null; boolean flag1 = false; for(int k = -1 + mClickableItems.size(); k >= 0; k--) flag1 |= ((ClickableItem)mClickableItems.get(k)).handleEvent(i, j, 1); invalidate(); if(!flag1 && mOnClickListener != null) mOnClickListener.onClick(this); 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; } protected abstract int draw(Canvas canvas, int i, int j, int k, int l); public void init(Cursor cursor, int i, int j, android.view.View.OnClickListener onclicklistener, ItemClickListener itemclicklistener, StreamCardView.ViewedListener viewedlistener, StreamCardView.StreamPlusBarClickListener streamplusbarclicklistener, StreamCardView.StreamMediaClickListener streammediaclicklistener) { mDisplaySizeType = i; mOnClickListener = onclicklistener; mItemClickListener = itemclicklistener; } protected abstract int layoutElements(int i, int j, int k, int l); protected void onAttachedToWindow() { super.onAttachedToWindow(); bindResources(); } protected void onBindResources() { } protected void onDetachedFromWindow() { super.onDetachedFromWindow(); onUnbindResources(); } protected void onDraw(Canvas canvas) { super.onDraw(canvas); int i = getWidth(); int j = getHeight(); int k; int l; int i1; int j1; if(mPaddingEnabled) { l = sXPadding; j1 = sYPadding; k = sXDoublePadding; i1 = sYDoublePadding; } else { k = 0; l = 0; i1 = 0; j1 = 0; } sBackground.setBounds(mBackgroundRect); sBackground.draw(canvas); draw(canvas, l + sLeftBorderPadding, j1 + sTopBorderPadding, i - (k + sLeftBorderPadding + sRightBorderPadding), j - (i1 + sTopBorderPadding + sBottomBorderPadding)); } 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; int j1; int k1; int l1; int i2; if(l <= 0) i1 = k; else i1 = l; if(mPaddingEnabled) { k1 = sXPadding; i2 = sYPadding; j1 = sXDoublePadding; l1 = sYDoublePadding; } else { j1 = 0; k1 = 0; l1 = 0; i2 = 0; } setMeasuredDimension(k, i1); mBackgroundRect.set(0, 0, getMeasuredWidth(), getMeasuredHeight()); layoutElements(k1 + sLeftBorderPadding, i2 + sTopBorderPadding, k - (j1 + sLeftBorderPadding + sRightBorderPadding), i1 - (l1 + sTopBorderPadding + sBottomBorderPadding)); } public void onRecycle() { onUnbindResources(); mClickableItems.clear(); mCurrentClickableItem = null; mOnClickListener = null; mItemClickListener = null; mBackgroundRect.setEmpty(); clearAnimation(); } public final void onResourceStatusChange(Resource resource) { invalidate(); } protected void onUnbindResources() { } public final void removeClickableItem(ClickableItem clickableitem) { mClickableItems.remove(clickableitem); } public void setPaddingEnabled(boolean flag) { mPaddingEnabled = flag; } public final void unbindResources() { onUnbindResources(); } public static void onStart() { } public static void onStop() { } }