/** * galaxy inc. * meetup client for android */ package com.galaxy.meetup.client.android.ui.view; import WriteReviewOperation.MediaRef; import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; import android.text.StaticLayout; import android.text.TextPaint; import android.text.TextUtils; import android.util.AttributeSet; import com.galaxy.meetup.client.android.Intents; import com.galaxy.meetup.client.android.R; import com.galaxy.meetup.client.android.content.DbEmbedSkyjam; import com.galaxy.meetup.client.android.service.EsService; import com.galaxy.meetup.client.android.service.ImageResourceManager; import com.galaxy.meetup.client.android.service.Resource; import com.galaxy.meetup.client.util.ImageUtils; import com.galaxy.meetup.client.util.TextPaintUtils; /** * * @author sihai * */ public class SkyjamCardView extends StreamCardView implements ClickableImageButton.ClickableImageButtonListener { protected static Paint sAlbumBorderPaint; protected static Bitmap sEmptyThumbnailBitmap; private static Bitmap sGoogleMusicBitmap; protected static TextPaint sListenBuyTextPaint; protected static TextPaint sNonTitleTextPaint; private static Bitmap sPlayOverlayBitmap; private static boolean sSkyjamCardViewInitialized; protected static int sSkyjamMediaBorderDimension; protected static int sSkyjamMediaDimension; protected static CharSequence sSkyjamPlayButtonDescription; protected static TextPaint sTitleTextPaint; protected String mAlbum; protected StaticLayout mAlbumLayout; protected String mArtist; protected StaticLayout mArtistLayout; protected ClickableImageButton mAutoPlayButton; protected Resource mImageResource; protected StaticLayout mListenBuyLayout; protected String mThumbnailUrl; protected String mTitle; protected StaticLayout mTitleLayout; public SkyjamCardView(Context context) { this(context, null); } public SkyjamCardView(Context context, AttributeSet attributeset) { super(context, attributeset); if(!sSkyjamCardViewInitialized) { sSkyjamCardViewInitialized = true; Resources resources = context.getResources(); TextPaint textpaint = new TextPaint(); sTitleTextPaint = textpaint; textpaint.setAntiAlias(true); sTitleTextPaint.setColor(resources.getColor(R.color.card_skyjam_title)); sTitleTextPaint.setTextSize(resources.getDimension(R.dimen.card_skyjam_title_text_size)); TextPaintUtils.registerTextPaint(sTitleTextPaint, R.dimen.card_skyjam_title_text_size); TextPaint textpaint1 = new TextPaint(); sNonTitleTextPaint = textpaint1; textpaint1.setAntiAlias(true); sNonTitleTextPaint.setColor(resources.getColor(R.color.card_skyjam_nontitle)); sNonTitleTextPaint.setTextSize(resources.getDimension(R.dimen.card_skyjam_nontitle_text_size)); TextPaintUtils.registerTextPaint(sNonTitleTextPaint, R.dimen.card_skyjam_nontitle_text_size); TextPaint textpaint2 = new TextPaint(); sListenBuyTextPaint = textpaint2; textpaint2.setAntiAlias(true); sListenBuyTextPaint.setColor(resources.getColor(R.color.card_skyjam_listen_buy)); sListenBuyTextPaint.setTextSize(resources.getDimension(R.dimen.card_skyjam_listen_buy_text_size)); TextPaintUtils.registerTextPaint(sListenBuyTextPaint, R.dimen.card_skyjam_listen_buy_text_size); Paint paint = new Paint(); sAlbumBorderPaint = paint; paint.setColor(resources.getColor(R.color.card_skyjam_album_border)); sAlbumBorderPaint.setStrokeWidth(resources.getDimension(R.dimen.card_skyjam_album_border_size)); sAlbumBorderPaint.setStyle(android.graphics.Paint.Style.STROKE); sEmptyThumbnailBitmap = ImageUtils.decodeResource(resources, R.drawable.empty_thumbnail); sGoogleMusicBitmap = ImageUtils.decodeResource(resources, R.drawable.google_music); sPlayOverlayBitmap = ImageUtils.decodeResource(resources, R.drawable.ic_play_overlay); sSkyjamMediaDimension = (int)resources.getDimension(R.dimen.card_skyjam_media_size); sSkyjamMediaBorderDimension = (int)resources.getDimension(R.dimen.card_skyjam_media_border_size); sSkyjamPlayButtonDescription = resources.getString(R.string.skyjam_content_play_button_description); } } protected final int draw(Canvas canvas, int i, int j, int k, int l) { int i1 = (int)((float)(l + sYDoublePadding) * getMediaHeightPercentage()); drawMediaTopAreaStageWithTiledBackground(canvas, k, i1); int j1 = (sSkyjamMediaBorderDimension - sSkyjamMediaDimension) / 2; canvas.drawRect(i, j, i + sSkyjamMediaBorderDimension, j + sSkyjamMediaBorderDimension, sAlbumBorderPaint); Bitmap bitmap; int k1; int l1; int i2; int j2; if(mImageResource == null) bitmap = null; else bitmap = (Bitmap)mImageResource.getResource(); if(bitmap == null) bitmap = sEmptyThumbnailBitmap; sDrawRect.set(i + j1, j + j1, i + j1 + sSkyjamMediaDimension, j + j1 + sSkyjamMediaDimension); canvas.drawBitmap(bitmap, null, sDrawRect, sResizePaint); if(mAutoPlayButton != null) mAutoPlayButton.draw(canvas); drawMediaTopAreaShadow(canvas, k, l); k1 = i + (sSkyjamMediaBorderDimension + sContentXPadding); l1 = k - (sSkyjamMediaBorderDimension + sContentXPadding); if(mTitleLayout != null) { canvas.translate(k1, j); mTitleLayout.draw(canvas); canvas.translate(-k1, -j); j += mTitleLayout.getHeight(); } if(mArtistLayout != null) { canvas.translate(k1, j); mArtistLayout.draw(canvas); canvas.translate(-k1, -j); j += mArtistLayout.getHeight(); } if(mAlbumLayout != null) { canvas.translate(k1, j); mAlbumLayout.draw(canvas); canvas.translate(-k1, -j); j += mAlbumLayout.getHeight(); } if(mListenBuyLayout != null) { canvas.translate(k1, j); mListenBuyLayout.draw(canvas); canvas.translate(-k1, -j); j += mListenBuyLayout.getHeight(); } if(i1 - j >= sGoogleMusicBitmap.getHeight()) { canvas.drawBitmap(sGoogleMusicBitmap, k1, j, null); sGoogleMusicBitmap.getHeight(); } i2 = k1 - (sSkyjamMediaBorderDimension + sContentXPadding); j2 = l1 + (sSkyjamMediaBorderDimension + sContentXPadding); drawPlusOneBar(canvas); drawMediaBottomArea(canvas, i2, j2, l); 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(23); if(abyte0 != null) { DbEmbedSkyjam dbembedskyjam = DbEmbedSkyjam.deserialize(abyte0); if(dbembedskyjam != null) { if(dbembedskyjam.isAlbum()) { mTitle = dbembedskyjam.getAlbum(); } else { mTitle = dbembedskyjam.getSong(); mAlbum = dbembedskyjam.getAlbum(); } mArtist = dbembedskyjam.getArtist(); mThumbnailUrl = dbembedskyjam.getImageUrl(); } } } protected final int layoutElements(int i, int j, int k, int l) { int i1 = (int)((float)(l + sYDoublePadding) * getMediaHeightPercentage()); int j1 = j; mBackgroundRect.set(0, i1, getMeasuredWidth(), getMeasuredHeight()); int k1 = (sSkyjamMediaBorderDimension - sSkyjamMediaDimension) / 2; if(mAlbum != null) { removeClickableItem(mAutoPlayButton); mAutoPlayButton = new ClickableImageButton(getContext(), sPlayOverlayBitmap, null, this, sSkyjamPlayButtonDescription); mAutoPlayButton.setPosition(i + k1, (j + k1 + sSkyjamMediaDimension) - sPlayOverlayBitmap.getHeight()); addClickableItem(mAutoPlayButton); } int l1 = i + (sSkyjamMediaBorderDimension + sContentXPadding); int i2 = k - (sSkyjamMediaBorderDimension + sContentXPadding); if(!TextUtils.isEmpty(mTitle)) { int k3 = (i1 - j) / (int)(sTitleTextPaint.descent() - sTitleTextPaint.ascent()); if(k3 > 0) { mTitleLayout = TextPaintUtils.createConstrainedStaticLayout(sTitleTextPaint, mTitle, i2, k3); j += mTitleLayout.getHeight(); } } if(!TextUtils.isEmpty(mArtist)) { int j3 = (i1 - j) / (int)(sNonTitleTextPaint.descent() - sNonTitleTextPaint.ascent()); if(j3 > 0) { mArtistLayout = TextPaintUtils.createConstrainedStaticLayout(sNonTitleTextPaint, mArtist, i2, j3); j += mArtistLayout.getHeight(); } } if(!TextUtils.isEmpty(mAlbum)) { int i3 = (i1 - j) / (int)(sNonTitleTextPaint.descent() - sNonTitleTextPaint.ascent()); if(i3 > 0) { mAlbumLayout = TextPaintUtils.createConstrainedStaticLayout(sNonTitleTextPaint, mAlbum, i2, i3); j += mAlbumLayout.getHeight(); } } int j2 = (i1 - j) / (int)(sListenBuyTextPaint.descent() - sListenBuyTextPaint.ascent()); if(j2 > 0) { mListenBuyLayout = TextPaintUtils.createConstrainedStaticLayout(sListenBuyTextPaint, getResources().getString(R.string.skyjam_listen_buy), i2, j2); mListenBuyLayout.getHeight(); } int k2 = l1 - (sSkyjamMediaBorderDimension + sContentXPadding); int l2 = i2 + (sSkyjamMediaBorderDimension + sContentXPadding); createPlusOneBar(k2, (i1 + sTopBorderPadding) - sYPadding, l2); createMediaBottomArea(k2, j1, l2, l); return l; } protected final void onBindResources() { super.onBindResources(); if(mThumbnailUrl != null) mImageResource = ImageResourceManager.getInstance(getContext()).getMedia(new MediaRef(mThumbnailUrl, MediaRef.MediaType.IMAGE), 2, this); } public final void onClickableImageButtonClick(ClickableImageButton clickableimagebutton) { if(clickableimagebutton == mAutoPlayButton) { Context context = getContext(); Intent intent = Intents.getStreamOneUpActivityIntent(context, EsService.getActiveAccount(context), mActivityId); intent.putExtra("auto_play_music", true); context.startActivity(intent); } } public void onRecycle() { super.onRecycle(); mTitle = null; mArtist = null; mAlbum = null; mThumbnailUrl = null; mTitleLayout = null; mArtistLayout = null; mAlbumLayout = null; mListenBuyLayout = null; mAutoPlayButton = null; } protected final void onUnbindResources() { super.onUnbindResources(); if(mImageResource != null) { mImageResource.unregister(this); mImageResource = null; } } }