/** * galaxy inc. * meetup client for android */ package com.galaxy.meetup.client.android.ui.view; import WriteReviewOperation.MediaRef; import android.content.Context; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Rect; import android.net.Uri; import android.text.TextUtils; import android.util.AttributeSet; import com.galaxy.meetup.client.android.R; import com.galaxy.meetup.client.android.content.DbEmbedMedia; import com.galaxy.meetup.client.android.service.ImageResourceManager; import com.galaxy.meetup.client.android.service.Resource; import com.galaxy.meetup.client.util.ImageUtils; /** * * @author sihai * */ public class ImageCardView extends StreamCardView implements ClickableRect.ClickableRectListener { private static Bitmap sAlbumBitmap; private static boolean sImageCardViewInitialized; private static ImageResourceManager sImageResourceManager; private static Bitmap sPanoramaBitmap; private static Bitmap sVideoBitmap; protected DbEmbedMedia mDbEmbedMedia; protected Rect mDestRect; protected Resource mImageResource; private int mImageSizeCategory; protected MediaRef mMediaRef; protected Rect mSrcRect; public ImageCardView(Context context) { this(context, null); } public ImageCardView(Context context, AttributeSet attributeset) { super(context, attributeset); if(!sImageCardViewInitialized) { sImageCardViewInitialized = true; sImageResourceManager = ImageResourceManager.getInstance(context); android.content.res.Resources resources = context.getResources(); sPanoramaBitmap = ImageUtils.decodeResource(resources, R.drawable.overlay_lightcycle); sVideoBitmap = ImageUtils.decodeResource(resources, R.drawable.ic_overlay_play); sAlbumBitmap = ImageUtils.decodeResource(resources, R.drawable.ic_overlay_album); } mDestRect = new Rect(); mSrcRect = new Rect(); } protected final int draw(Canvas canvas, int i, int j, int k, int l) { Bitmap bitmap; boolean flag; Bitmap bitmap1; if(mImageResource == null) bitmap = null; else bitmap = (Bitmap)mImageResource.getResource(); if(bitmap != null) flag = true; else flag = false; drawMediaTopAreaStage(canvas, k, l, flag, mDestRect, sMediaTopAreaBackgroundPaint); if(bitmap != null) { if(mSrcRect.isEmpty()) createSourceRectForMediaImage(mSrcRect, bitmap, k, l); canvas.drawBitmap(bitmap, mSrcRect, mDestRect, sResizePaint); } if(mDbEmbedMedia.isAlbum()) bitmap1 = sAlbumBitmap; else if(mDbEmbedMedia.isVideo()) bitmap1 = sVideoBitmap; else if(mDbEmbedMedia.isPanorama()) bitmap1 = sPanoramaBitmap; else bitmap1 = null; if(bitmap1 != null) canvas.drawBitmap(bitmap1, mDestRect.left + (mDestRect.width() - bitmap1.getWidth()) / 2, mDestRect.top + (mDestRect.height() - bitmap1.getHeight()) / 2, null); drawMediaTopAreaShadow(canvas, k, l); drawTagBarIconAndBackground(canvas, i, j); drawPlusOneBar(canvas); drawMediaBottomArea(canvas, i, k, l); drawCornerIcon(canvas); return l; } public final String getAlbumId() { return mDbEmbedMedia.getAlbumId(); } public final int getDesiredHeight() { return mDbEmbedMedia.getHeight(); } public final int getDesiredWidth() { return mDbEmbedMedia.getWidth(); } public final String getMediaLinkUrl() { return mDbEmbedMedia.getContentUrl(); } public final MediaRef getMediaRef() { return mMediaRef; } 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(22); if(abyte0 != null) { mDbEmbedMedia = DbEmbedMedia.deserialize(abyte0); String s = mDbEmbedMedia.getImageUrl(); String s1 = mDbEmbedMedia.getVideoUrl(); if(mDbEmbedMedia.isVideo()) { String s2 = ImageUtils.rewriteYoutubeMediaUrl(s1); if(!TextUtils.equals(s1, s2)) s = s2; } Uri uri; if(mDbEmbedMedia.isVideo()) uri = Uri.parse(s1); else uri = null; mMediaRef = new MediaRef(mDbEmbedMedia.getOwnerId(), mDbEmbedMedia.getPhotoId(), s, uri, mDbEmbedMedia.getMediaType()); mImageSizeCategory = 3; if(!mDbEmbedMedia.isVideo()) if(mDisplaySizeType == 2) mImageSizeCategory = 5; else if(mDisplaySizeType == 1) mImageSizeCategory = 4; if(mTag == null && !TextUtils.isEmpty(mDbEmbedMedia.getTitle())) { mTag = mDbEmbedMedia.getTitle().toUpperCase(); Bitmap bitmap; if(mDbEmbedMedia.isVideo()) bitmap = sTagVideoBitmaps[0]; else bitmap = sTagAlbumBitmaps[0]; mTagIcon = bitmap; } } } public final boolean isAlbum() { return mDbEmbedMedia.isAlbum(); } protected final int layoutElements(int i, int j, int k, int l) { int i1 = k + sXDoublePadding; int j1 = (int)((float)(l + sYDoublePadding) * getMediaHeightPercentage()); mBackgroundRect.set(0, j1, getMeasuredWidth(), getMeasuredHeight()); createTagBar(i, j, k); createPlusOneBar(i, (j1 + sTopBorderPadding) - sYPadding, k); createMediaBottomArea(i, j, k, l); mSrcRect.setEmpty(); mDestRect.set(sLeftBorderPadding, sTopBorderPadding, i1 + sLeftBorderPadding, j1 + sTopBorderPadding); return l; } protected final void onBindResources() { super.onBindResources(); if(mMediaRef != null) mImageResource = sImageResourceManager.getMedia(mMediaRef, mImageSizeCategory, this); } public final void onClickableRectClick() { if(mStreamMediaClickListener != null) mStreamMediaClickListener.onMediaClicked(mDbEmbedMedia.getAlbumId(), mDbEmbedMedia.getOwnerId(), mMediaRef, mDbEmbedMedia.isVideo(), this); } public void onRecycle() { super.onRecycle(); mDbEmbedMedia = null; mMediaRef = null; mSrcRect.setEmpty(); mDestRect.setEmpty(); } protected final void onUnbindResources() { super.onUnbindResources(); if(mImageResource != null) { mImageResource.unregister(this); mImageResource = null; } } }