/** * galaxy inc. * meetup client for android */ package com.galaxy.meetup.client.android.ui.view; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.PointF; import android.graphics.Rect; import android.graphics.RectF; import android.text.TextPaint; import android.text.TextUtils; 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.content.MediaImageRequest; import com.galaxy.meetup.client.android.service.EsService; import com.galaxy.meetup.client.android.service.ImageCache; import com.galaxy.meetup.client.android.service.ImageCache.OnMediaImageChangeListener; import com.galaxy.meetup.client.android.service.SkyjamPlaybackService; import com.galaxy.meetup.client.android.service.SkyjamPlaybackService.SkyjamPlaybackListener; import com.galaxy.meetup.client.android.ui.view.ClickableRect.ClickableRectListener; import com.galaxy.meetup.client.util.AccessibilityUtils; import com.galaxy.meetup.client.util.ImageUtils; import com.galaxy.meetup.client.util.StringUtils; import com.galaxy.meetup.client.util.TextPaintUtils; /** * * @author sihai * */ public class StreamOneUpSkyjamView extends View implements OnMediaImageChangeListener, SkyjamPlaybackListener, ClickableRectListener { private static int sActionBarHeight; protected static TextPaint sDefaultTextPaint; private static Bitmap sEmptyImage; private static Bitmap sGoogleMusic; private static ImageCache sImageCache; protected static int sMaxWidth; protected static int sNameMargin; private static Bitmap sPlayIcon; protected static int sPlayStopButtonPadding; private static Paint sPreviewPaint; private static Paint sResizePaint; private static CharSequence sSkyjamPlayButtonDesc; private static Bitmap sStopIcon; private static boolean sStreamOneUpSkyjamViewInitialized; private static Bitmap sTagIcon; private static Paint sTagPaint; protected static TextPaint sTagTextPaint; private Bitmap mActionIcon; private PointF mActionIconPoint; private ClickableRect mActionRect; private String mActivityId; private final Set mClickableItems; private ClickableItem mCurrentClickableItem; private Rect mGoogleMusicRect; private MediaImage mImage; private Rect mImageRect; private String mImageUrl; private boolean mIsAlbum; private String mMusicUrl; private RectF mPreviewBackground; private String mPreviewStatus; private PointF mPreviewStatusPoint; private RectF mTagBackground; private Rect mTagIconRect; private PositionedStaticLayout mTagLayout; private String mTagTitle; public StreamOneUpSkyjamView(Context context) { super(context); mClickableItems = new HashSet(); Context context1 = getContext(); if(!sStreamOneUpSkyjamViewInitialized) { sStreamOneUpSkyjamViewInitialized = true; sImageCache = ImageCache.getInstance(context1); Resources resources = getResources(); sTagIcon = ImageUtils.decodeResource(resources, R.drawable.ic_metadata_music); sEmptyImage = ImageUtils.decodeResource(resources, R.drawable.empty_thumbnail); sGoogleMusic = ImageUtils.decodeResource(resources, R.drawable.google_music); sPlayIcon = ImageUtils.resizeToSquareBitmap(ImageUtils.decodeResource(resources, R.drawable.ic_play), sGoogleMusic.getHeight()); sStopIcon = ImageUtils.resizeToSquareBitmap(ImageUtils.decodeResource(resources, R.drawable.ic_stop), sGoogleMusic.getHeight()); sActionBarHeight = (int)resources.getDimension(R.dimen.host_action_bar_height); sMaxWidth = (int)resources.getDimension(R.dimen.stream_one_up_list_max_width); sNameMargin = (int)resources.getDimension(R.dimen.stream_one_up_stage_hangout_name_margin); sPlayStopButtonPadding = (int)resources.getDimension(R.dimen.stream_one_up_stage_skyjam_play_stop_padding); sResizePaint = new Paint(2); Paint paint = new Paint(); sTagPaint = paint; paint.setAntiAlias(true); sTagPaint.setColor(resources.getColor(R.color.stream_one_up_stage_skyjam_tag_background)); sTagPaint.setStyle(android.graphics.Paint.Style.FILL); Paint paint1 = new Paint(); sPreviewPaint = paint1; paint1.setAntiAlias(true); sPreviewPaint.setColor(resources.getColor(R.color.stream_one_up_stage_skyjam_preview_background)); sPreviewPaint.setStyle(android.graphics.Paint.Style.FILL); TextPaint textpaint = new TextPaint(); sDefaultTextPaint = textpaint; textpaint.setAntiAlias(true); sDefaultTextPaint.setColor(resources.getColor(R.color.stream_one_up_stage_skyjam_preview)); sDefaultTextPaint.setTextSize(resources.getDimension(R.dimen.stream_one_up_stage_default_text_size)); TextPaintUtils.registerTextPaint(sDefaultTextPaint, R.dimen.stream_one_up_stage_default_text_size); TextPaint textpaint1 = new TextPaint(); sTagTextPaint = textpaint1; textpaint1.setAntiAlias(true); sTagTextPaint.setColor(resources.getColor(R.color.stream_one_up_stage_tag)); sTagTextPaint.setTextSize(resources.getDimension(R.dimen.stream_one_up_stage_default_text_size)); TextPaintUtils.registerTextPaint(sTagTextPaint, R.dimen.stream_one_up_stage_default_text_size); sSkyjamPlayButtonDesc = resources.getString(R.string.skyjam_content_play_button_description); } } public StreamOneUpSkyjamView(Context context, AttributeSet attributeset) { super(context, attributeset); mClickableItems = new HashSet(); Context context1 = getContext(); if(!sStreamOneUpSkyjamViewInitialized) { sStreamOneUpSkyjamViewInitialized = true; sImageCache = ImageCache.getInstance(context1); Resources resources = getResources(); sTagIcon = ImageUtils.decodeResource(resources, R.drawable.ic_metadata_music); sEmptyImage = ImageUtils.decodeResource(resources, R.drawable.empty_thumbnail); sGoogleMusic = ImageUtils.decodeResource(resources, R.drawable.google_music); sPlayIcon = ImageUtils.resizeToSquareBitmap(ImageUtils.decodeResource(resources, R.drawable.ic_play), sGoogleMusic.getHeight()); sStopIcon = ImageUtils.resizeToSquareBitmap(ImageUtils.decodeResource(resources, R.drawable.ic_stop), sGoogleMusic.getHeight()); sActionBarHeight = (int)resources.getDimension(R.dimen.host_action_bar_height); sMaxWidth = (int)resources.getDimension(R.dimen.stream_one_up_list_max_width); sNameMargin = (int)resources.getDimension(R.dimen.stream_one_up_stage_hangout_name_margin); sPlayStopButtonPadding = (int)resources.getDimension(R.dimen.stream_one_up_stage_skyjam_play_stop_padding); sResizePaint = new Paint(2); Paint paint = new Paint(); sTagPaint = paint; paint.setAntiAlias(true); sTagPaint.setColor(resources.getColor(R.color.stream_one_up_stage_skyjam_tag_background)); sTagPaint.setStyle(android.graphics.Paint.Style.FILL); Paint paint1 = new Paint(); sPreviewPaint = paint1; paint1.setAntiAlias(true); sPreviewPaint.setColor(resources.getColor(R.color.stream_one_up_stage_skyjam_preview_background)); sPreviewPaint.setStyle(android.graphics.Paint.Style.FILL); TextPaint textpaint = new TextPaint(); sDefaultTextPaint = textpaint; textpaint.setAntiAlias(true); sDefaultTextPaint.setColor(resources.getColor(R.color.stream_one_up_stage_skyjam_preview)); sDefaultTextPaint.setTextSize(resources.getDimension(R.dimen.stream_one_up_stage_default_text_size)); TextPaintUtils.registerTextPaint(sDefaultTextPaint, R.dimen.stream_one_up_stage_default_text_size); TextPaint textpaint1 = new TextPaint(); sTagTextPaint = textpaint1; textpaint1.setAntiAlias(true); sTagTextPaint.setColor(resources.getColor(R.color.stream_one_up_stage_tag)); sTagTextPaint.setTextSize(resources.getDimension(R.dimen.stream_one_up_stage_default_text_size)); TextPaintUtils.registerTextPaint(sTagTextPaint, R.dimen.stream_one_up_stage_default_text_size); sSkyjamPlayButtonDesc = resources.getString(R.string.skyjam_content_play_button_description); } } public StreamOneUpSkyjamView(Context context, AttributeSet attributeset, int i) { super(context, attributeset, i); mClickableItems = new HashSet(); Context context1 = getContext(); if(!sStreamOneUpSkyjamViewInitialized) { sStreamOneUpSkyjamViewInitialized = true; sImageCache = ImageCache.getInstance(context1); Resources resources = getResources(); sTagIcon = ImageUtils.decodeResource(resources, R.drawable.ic_metadata_music); sEmptyImage = ImageUtils.decodeResource(resources, R.drawable.empty_thumbnail); sGoogleMusic = ImageUtils.decodeResource(resources, R.drawable.google_music); sPlayIcon = ImageUtils.resizeToSquareBitmap(ImageUtils.decodeResource(resources, R.drawable.ic_play), sGoogleMusic.getHeight()); sStopIcon = ImageUtils.resizeToSquareBitmap(ImageUtils.decodeResource(resources, R.drawable.ic_stop), sGoogleMusic.getHeight()); sActionBarHeight = (int)resources.getDimension(R.dimen.host_action_bar_height); sMaxWidth = (int)resources.getDimension(R.dimen.stream_one_up_list_max_width); sNameMargin = (int)resources.getDimension(R.dimen.stream_one_up_stage_hangout_name_margin); sPlayStopButtonPadding = (int)resources.getDimension(R.dimen.stream_one_up_stage_skyjam_play_stop_padding); sResizePaint = new Paint(2); Paint paint = new Paint(); sTagPaint = paint; paint.setAntiAlias(true); sTagPaint.setColor(resources.getColor(R.color.stream_one_up_stage_skyjam_tag_background)); sTagPaint.setStyle(android.graphics.Paint.Style.FILL); Paint paint1 = new Paint(); sPreviewPaint = paint1; paint1.setAntiAlias(true); sPreviewPaint.setColor(resources.getColor(R.color.stream_one_up_stage_skyjam_preview_background)); sPreviewPaint.setStyle(android.graphics.Paint.Style.FILL); TextPaint textpaint = new TextPaint(); sDefaultTextPaint = textpaint; textpaint.setAntiAlias(true); sDefaultTextPaint.setColor(resources.getColor(R.color.stream_one_up_stage_skyjam_preview)); sDefaultTextPaint.setTextSize(resources.getDimension(R.dimen.stream_one_up_stage_default_text_size)); TextPaintUtils.registerTextPaint(sDefaultTextPaint, R.dimen.stream_one_up_stage_default_text_size); TextPaint textpaint1 = new TextPaint(); sTagTextPaint = textpaint1; textpaint1.setAntiAlias(true); sTagTextPaint.setColor(resources.getColor(R.color.stream_one_up_stage_tag)); sTagTextPaint.setTextSize(resources.getDimension(R.dimen.stream_one_up_stage_default_text_size)); TextPaintUtils.registerTextPaint(sTagTextPaint, R.dimen.stream_one_up_stage_default_text_size); sSkyjamPlayButtonDesc = resources.getString(R.string.skyjam_content_play_button_description); } } public final void bind(String s, String s1, String s2, String s3, String s4, String s5) { mClickableItems.clear(); mCurrentClickableItem = null; mIsAlbum = TextUtils.isEmpty(s1); int i; if(mIsAlbum) { i = s4.indexOf("https://"); if(i < 0) i = s4.indexOf("https://"); } else { i = s3.indexOf("https://"); if(i < 0) i = s3.indexOf("https://"); } if(i >= 0) { mIsAlbum = TextUtils.isEmpty(s1); Context context; String s6; StringBuilder stringbuilder; if(mIsAlbum) { mMusicUrl = s4.substring(i); } else { mMusicUrl = s3.substring(i); if(mMusicUrl.contains("mode=inline")) mMusicUrl = mMusicUrl.replace("mode=inline", "mode=streaming"); else mMusicUrl = (new StringBuilder()).append(mMusicUrl).append("&mode=streaming").toString(); } mPreviewStatus = SkyjamPlaybackService.getPlaybackStatus(getContext(), mMusicUrl); context = getContext(); if(mIsAlbum) { s6 = StringUtils.unescape(s); } else { int j = R.string.skyjam_from_the_album; Object aobj[] = new Object[1]; aobj[0] = StringUtils.unescape(s).toUpperCase(); s6 = context.getString(j, aobj); } if(!mIsAlbum) s6 = s1; mTagTitle = s6; if(!TextUtils.isEmpty(s2)) { mImageUrl = s2; mImage = new MediaImage(this, new MediaImageRequest(s2, 3, 300)); mImage.load(); } stringbuilder = new StringBuilder(256); if(!TextUtils.isEmpty(s)) stringbuilder.append(s).append('\n'); if(!TextUtils.isEmpty(s1)) stringbuilder.append(s1); setContentDescription(stringbuilder.toString()); mActivityId = s5; } invalidate(); requestLayout(); } public boolean dispatchTouchEvent(MotionEvent motionevent) { boolean flag = true; int i = (int)motionevent.getX(); int j = (int)motionevent.getY(); switch(motionevent.getAction()) { case 0: for(Iterator iterator1 = mClickableItems.iterator(); iterator1.hasNext();) { ClickableItem clickableitem = (ClickableItem)iterator1.next(); if(clickableitem.handleEvent(i, j, 0)) { mCurrentClickableItem = clickableitem; invalidate(); return flag; } } flag = false; break; case 1: mCurrentClickableItem = null; for(Iterator iterator = mClickableItems.iterator(); iterator.hasNext(); ((ClickableItem)iterator.next()).handleEvent(i, j, 1)); invalidate(); 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 void onAttachedToWindow() { super.onAttachedToWindow(); ImageCache _tmp = sImageCache; ImageCache.registerMediaImageChangeListener(this); SkyjamPlaybackService.registerListener(this); } public final void onClickableRectClick() { Context context = getContext(); boolean flag; Intent intent; String s; if(!SkyjamPlaybackService.isPlaying(mMusicUrl)) flag = true; else flag = false; intent = new Intent(context, SkyjamPlaybackService.class); if(flag) s = "com.google.android.apps.plus.service.SkyjamPlaybackService.PLAY"; else s = "com.google.android.apps.plus.service.SkyjamPlaybackService.STOP"; intent.setAction(s); intent.putExtra("music_account", EsService.getActiveAccount(context)); intent.putExtra("music_url", mMusicUrl); intent.putExtra("song", mTagTitle); intent.putExtra("activity_id", mActivityId); context.startService(intent); } protected void onDetachedFromWindow() { super.onDetachedFromWindow(); ImageCache _tmp = sImageCache; ImageCache.unregisterMediaImageChangeListener(this); SkyjamPlaybackService.unregisterListener(this); } protected void onDraw(Canvas canvas) { canvas.drawRoundRect(mTagBackground, 5F, 5F, sTagPaint); canvas.drawBitmap(sTagIcon, null, mTagIconRect, null); int i = mTagLayout.getLeft(); int j = mTagLayout.getTop(); canvas.translate(i, j); mTagLayout.draw(canvas); canvas.translate(-i, -j); if(mImage != null) { mImage.refreshIfInvalidated(); Bitmap bitmap = mImage.getBitmap(); if(bitmap == null) bitmap = sEmptyImage; canvas.drawBitmap(bitmap, null, mImageRect, sResizePaint); } if(mPreviewBackground != null) { canvas.drawRect(mPreviewBackground, sPreviewPaint); canvas.drawText(mPreviewStatus, mPreviewStatusPoint.x, mPreviewStatusPoint.y, sDefaultTextPaint); canvas.drawBitmap(mActionIcon, mActionIconPoint.x, mActionIconPoint.y, null); canvas.drawBitmap(sGoogleMusic, null, mGoogleMusicRect, null); } } protected void onMeasure(int i, int j) { int k = android.view.View.MeasureSpec.getSize(i); int value = android.view.View.MeasureSpec.getMode(i); int l = sMaxWidth; if(-2147483648 == value) { l = Math.min(k, sMaxWidth); } else if(1073741824 == value) { l = k; } super.onMeasure(android.view.View.MeasureSpec.makeMeasureSpec(l, 0x40000000), j); int i1 = getPaddingLeft(); int j1 = getPaddingTop(); int k1 = getMeasuredWidth(); int l1 = getMeasuredHeight(); int i2 = k1 - i1 - getPaddingRight(); int j2 = l1 - j1 - getPaddingBottom(); int k2 = i1 + 13; int l2 = j1 + 13; int i3 = sTagIcon.getWidth(); int j3 = sTagIcon.getHeight(); int k3 = (int)sDefaultTextPaint.measureText(mTagTitle); int l3 = k3 + (i3 + 15); mTagBackground = new RectF(k2, l2, l3 + k2, l2 + 39); mTagLayout = new PositionedStaticLayout(mTagTitle, sTagTextPaint, k3, android.text.Layout.Alignment.ALIGN_NORMAL, 1.0F, 0.0F, false); int i4 = mTagLayout.getHeight(); int j4 = k2 + 5; int k4 = l2 + (39 - j3) / 2; mTagIconRect = new Rect(j4, k4, j4 + i3, k4 + j3); int l4 = j4 + (i3 + 5); int i5 = j1 + 13 + (39 - i4) / 2; mTagLayout.setPosition(l4, i5); int j5 = 13 + (j1 + 13 + (int)mTagBackground.height()); int k5 = i2 - 52; int l5 = j1 + (j2 - j5); int i6; int j6; int k6; if(mImage != null) { int j9 = Math.min(l5, k5); mImage.refreshIfInvalidated(); j6 = i1 + (26 + (k5 - j9) / 2); mImageRect = new Rect(j6, j5, j6 + j9, j5 + j9); i6 = j9; } else { i6 = k5; j6 = i1; } if(!mIsAlbum) { mPreviewBackground = new RectF(j6, j5, j6 + i6, j5 + 66); mClickableItems.remove(mActionRect); mActionRect = new ClickableRect(j6, j5 + sActionBarHeight, j6 + i6, j5 + 66, this, sSkyjamPlayButtonDesc); mClickableItems.add(mActionRect); Bitmap bitmap; int l6; int i7; int j7; int k7; int l7; int i8; int j8; int k8; int l8; int i9; if(SkyjamPlaybackService.isPlaying(mMusicUrl)) bitmap = sStopIcon; else bitmap = sPlayIcon; mActionIcon = bitmap; l6 = mActionIcon.getHeight(); i7 = 13 + (int)mPreviewBackground.left; j7 = (int)mPreviewBackground.top + (66 - l6) / 2; mActionIconPoint = new PointF(i7, j7); k7 = (int)(sDefaultTextPaint.descent() - sDefaultTextPaint.ascent()); l7 = i7 + (13 + mActionIcon.getWidth()); i8 = ((int)mPreviewBackground.top + (66 - k7) / 2) - (int)sDefaultTextPaint.ascent(); mPreviewStatusPoint = new PointF(l7, i8); j8 = sGoogleMusic.getWidth(); k8 = sGoogleMusic.getHeight(); l8 = (int)mPreviewBackground.right - j8; i9 = (int)mPreviewBackground.top + (66 - k8) / 2; mGoogleMusicRect = new Rect(l8, i9, j8 + l8, k8 + i9); } k6 = 13 + (j1 + 13 + (int)mTagBackground.height()); if(mImage != null) k6 += i6; else if(mPreviewBackground != null) k6 += 66; setMeasuredDimension(k1, k6 + getPaddingBottom()); return; } public final void onMediaImageChanged(String s) { if(MediaImageRequest.areCanonicallyEqual(mImageUrl, s)) mImage.invalidate(); invalidate(); } public final void onPlaybackStatusUpdate(String s, boolean flag, String s1) { Bitmap bitmap = mActionIcon; boolean flag1; if(flag && s != null && s.equals(mMusicUrl)) mActionIcon = sStopIcon; else mActionIcon = sPlayIcon; if(mMusicUrl.equals(s) && !mPreviewStatus.equals(s1)) flag1 = true; else flag1 = false; if(flag1) mPreviewStatus = s1; if(bitmap != mActionIcon || flag1) invalidate(); } public final void processClick(float f, float f1) { if(mActionRect != null) { Rect rect = mActionRect.getRect(); int ai[] = new int[2]; getLocationOnScreen(ai); if(rect.contains((int)(f - (float)ai[0]), (int)(f1 - (float)ai[1])) || AccessibilityUtils.isAccessibilityEnabled(getContext())) { ClickableRect _tmp = mActionRect; onClickableRectClick(); } } } public final void startAutoPlay() { if(!SkyjamPlaybackService.isPlaying(mMusicUrl)) onClickableRectClick(); } }