/**
* galaxy inc.
* meetup client for android
*/
package com.galaxy.meetup.client.android.ui.view;
import java.util.Iterator;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.media.MediaPlayer;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.VideoView;
import com.galaxy.meetup.client.android.R;
import com.galaxy.meetup.client.android.common.Recyclable;
import com.galaxy.meetup.client.android.ui.view.EsImageView.OnImageLoadedListener;
import com.galaxy.meetup.server.client.v2.domain.Event;
import com.galaxy.meetup.server.client.v2.domain.EventOptions;
import com.galaxy.meetup.server.client.v2.domain.Theme;
import com.galaxy.meetup.server.client.v2.domain.ThemeImage;
/**
*
* @author sihai
*
*/
public class EventDetailsHeaderView extends ViewGroup implements
android.media.MediaPlayer.OnErrorListener,
android.media.MediaPlayer.OnPreparedListener, OnClickListener,
OnImageLoadedListener, Recyclable {
private static int sAvatarOverlap;
private static int sAvatarSize;
private static String sCollapseText;
private static String sExpandText;
private static boolean sInitialized = false;
private static int sOnAirColor;
private static Drawable sOnAirDrawable;
private static String sOnAirText;
private static int sPadding;
private static int sPrivatePublicColor;
private static String sPrivateText;
private static String sPublicText;
private static int sSecondaryPadding;
private static float sTypeSize;
private EventActionListener mActionListener;
private AvatarView mAvatar;
private int mChevronResId;
private ImageView mExpandCollapseChevronView;
private TextView mExpandCollapseTextView;
private View mExpandCollapseView;
private boolean mOnAirWrap;
private android.view.View.OnClickListener mOnClickListener;
private EventThemeView mThemeImageView;
private TextView mTitleView;
private TextView mTypeView;
private String mVideoThemeUrl;
private VideoView mVideoView;
public EventDetailsHeaderView(Context context)
{
this(context, null);
}
public EventDetailsHeaderView(Context context, AttributeSet attributeset)
{
this(context, attributeset, 0);
}
public EventDetailsHeaderView(Context context, AttributeSet attributeset, int i)
{
super(context, attributeset, i);
if(!sInitialized)
{
sInitialized = true;
Resources resources1 = getResources();
int j = resources1.getDimensionPixelSize(R.dimen.event_card_details_avatar_size);
sAvatarSize = j;
sAvatarOverlap = (int)((float)j * resources1.getDimension(R.dimen.event_card_details_avatar_percent_overlap));
sPadding = resources1.getDimensionPixelSize(R.dimen.event_card_padding);
sSecondaryPadding = resources1.getDimensionPixelSize(R.dimen.event_card_details_secondary_padding);
sOnAirText = resources1.getString(R.string.event_detail_on_air);
sOnAirColor = resources1.getColor(R.color.event_detail_on_air);
sPrivateText = resources1.getString(R.string.event_detail_private);
sPublicText = resources1.getString(R.string.event_detail_public);
sPrivatePublicColor = resources1.getColor(R.color.event_detail_private);
sTypeSize = resources1.getDimension(R.dimen.event_card_details_on_air_size);
sOnAirDrawable = resources1.getDrawable(R.drawable.btn_events_on_air);
sExpandText = resources1.getString(R.string.profile_show_more);
sCollapseText = resources1.getString(R.string.profile_show_less);
}
Resources resources = getResources();
if(android.os.Build.VERSION.SDK_INT >= 14)
{
mVideoView = new VideoView(context);
mVideoView.setOnErrorListener(this);
addView(mVideoView);
}
mThemeImageView = new EventThemeView(context);
mThemeImageView.setFadeIn(true);
addView(mThemeImageView);
mAvatar = new AvatarView(context);
mAvatar.setRounded(true);
addView(mAvatar);
mTitleView = new TextView(context);
mTitleView.setTextColor(resources.getColor(R.color.event_card_details_title_color));
mTitleView.setTextSize(0, resources.getDimension(R.dimen.event_card_details_title_size));
mTitleView.setTypeface(Typeface.DEFAULT_BOLD);
addView(mTitleView);
mExpandCollapseChevronView = new ImageView(context);
mExpandCollapseChevronView.setImageResource(R.drawable.icn_events_arrow_down);
mChevronResId = R.drawable.icn_events_arrow_down;
addView(mExpandCollapseChevronView);
mExpandCollapseView = new View(context);
addView(mExpandCollapseView);
mTypeView = new TextView(context);
mTypeView.setTextSize(0, resources.getDimension(R.dimen.event_card_details_subtitle_size));
mTypeView.setSingleLine();
mTypeView.setGravity(17);
addView(mTypeView);
mExpandCollapseTextView = new TextView(context);
mExpandCollapseTextView.setTextSize(0, resources.getDimension(R.dimen.event_card_details_title_size));
mExpandCollapseTextView.setTextColor(resources.getColor(R.color.event_card_details_collapse_expand_color));
mExpandCollapseTextView.setText(sExpandText);
mExpandCollapseTextView.setSingleLine();
mExpandCollapseTextView.setEllipsize(android.text.TextUtils.TruncateAt.END);
addView(mExpandCollapseTextView);
}
public final void bind(Event plusevent, android.view.View.OnClickListener onclicklistener, boolean flag, EventActionListener eventactionlistener)
{
setEventTheme(plusevent.getTheme());
mAvatar.setGaiaId(plusevent.getPublisher());
mTitleView.setText(plusevent.getName());
removeView(mExpandCollapseTextView);
removeView(mExpandCollapseChevronView);
removeView(mExpandCollapseView);
if(onclicklistener != null)
{
addView(mExpandCollapseChevronView);
addView(mExpandCollapseView);
if(flag)
addView(mExpandCollapseTextView);
}
mOnClickListener = onclicklistener;
mActionListener = eventactionlistener;
EventOptions options = plusevent.getOptions();
if(null != options && options.isBroadcast())
{
mTypeView.setText(sOnAirText);
mTypeView.setTextColor(sOnAirColor);
mTypeView.setBackgroundDrawable(sOnAirDrawable);
mTypeView.setVisibility(0);
} else if(plusevent.isPublic()) {
TextView textview = mTypeView;
textview.setText(sPublicText);
mTypeView.setTextColor(sPrivatePublicColor);
mTypeView.setBackgroundDrawable(null);
mTypeView.setVisibility(0);
} else if(!plusevent.isPublic()) {
TextView textview = mTypeView;
textview.setText(sPrivateText);
mTypeView.setTextColor(sPrivatePublicColor);
mTypeView.setBackgroundDrawable(null);
mTypeView.setVisibility(0);
} else {
mTypeView.setVisibility(8);
}
mTypeView.setTextSize(0, sTypeSize);
if(mVideoView != null)
mVideoView.setVisibility(4);
mThemeImageView.setOnImageLoadedListener(this);
mAvatar.setOnClickListener(this);
mExpandCollapseView.setOnClickListener(this);
}
public void onClick(View view)
{
if(!(view instanceof AvatarView) || mActionListener == null) {
if(mOnClickListener != null)
mOnClickListener.onClick(view);
} else {
mActionListener.onAvatarClicked(((AvatarView)view).getGaiaId());
}
}
public boolean onError(MediaPlayer mediaplayer, int i, int j)
{
return true;
}
public final void onImageLoaded()
{
if(mVideoView != null && !TextUtils.isEmpty(mVideoThemeUrl))
{
android.net.Uri.Builder builder = new android.net.Uri.Builder();
builder.path(mVideoThemeUrl);
mVideoView.setVisibility(0);
mVideoView.setVideoURI(builder.build());
mVideoView.setOnPreparedListener(this);
}
}
protected void onLayout(boolean flag, int i, int j, int k, int l)
{
int i1 = getMeasuredWidth();
int j1 = (int)((float)i1 / 3.36F);
mThemeImageView.layout(0, 0, i1, j1);
if(mVideoView != null)
mVideoView.layout(0, 0, i1, j1);
int k1 = sPadding;
int l1 = j1 - sAvatarOverlap;
mAvatar.layout(k1, l1, k1 + sAvatarSize, l1 + sAvatarSize);
int i2 = sPadding + sAvatarSize + sPadding;
int j2 = j1 + sPadding;
mTitleView.layout(i2, j2, i2 + mTitleView.getMeasuredWidth(), j2 + mTitleView.getMeasuredHeight());
if(mTypeView.getVisibility() == 0)
{
int k3 = j2 + mTitleView.getMeasuredHeight();
mTypeView.layout(i2, k3, i2 + mTypeView.getMeasuredWidth(), k3 + mTypeView.getMeasuredHeight());
}
if(mOnClickListener != null)
{
int k2 = mExpandCollapseChevronView.getMeasuredHeight();
int l2 = (j2 + mTitleView.getBaseline()) - k2;
int i3 = i1 - mExpandCollapseChevronView.getMeasuredWidth() - sSecondaryPadding;
mExpandCollapseChevronView.layout(i3, l2, i3 + mExpandCollapseChevronView.getMeasuredWidth(), l2 + k2);
int j3 = i3 - mExpandCollapseTextView.getMeasuredWidth() - sPadding;
mExpandCollapseTextView.layout(j3, j2, j3 + mExpandCollapseTextView.getMeasuredWidth(), j2 + mExpandCollapseTextView.getMeasuredHeight());
mExpandCollapseView.layout(sAvatarSize, j1, sAvatarSize + mExpandCollapseView.getMeasuredWidth(), j1 + mExpandCollapseView.getMeasuredHeight());
}
}
protected void onMeasure(int i, int j)
{
super.onMeasure(i, j);
int k = android.view.View.MeasureSpec.getSize(i);
if(k == 0)
k = android.view.View.MeasureSpec.getSize(j);
int l = (int)((float)k / 3.36F);
mThemeImageView.measure(android.view.View.MeasureSpec.makeMeasureSpec(k, 0x40000000), android.view.View.MeasureSpec.makeMeasureSpec(l, 0x40000000));
if(mVideoView != null)
mVideoView.measure(android.view.View.MeasureSpec.makeMeasureSpec(k, 0x40000000), android.view.View.MeasureSpec.makeMeasureSpec(l, 0x40000000));
mAvatar.measure(android.view.View.MeasureSpec.makeMeasureSpec(sAvatarSize, 0x40000000), android.view.View.MeasureSpec.makeMeasureSpec(sAvatarSize, 0x40000000));
int i1 = Math.max(0, k - mAvatar.getMeasuredWidth() - 2 * sPadding - sSecondaryPadding);
if(mOnClickListener != null)
{
mExpandCollapseChevronView.measure(android.view.View.MeasureSpec.makeMeasureSpec(0, 0), android.view.View.MeasureSpec.makeMeasureSpec(0, 0));
i1 = Math.max(0, i1 - (mExpandCollapseChevronView.getMeasuredWidth() + sPadding));
}
mTitleView.measure(android.view.View.MeasureSpec.makeMeasureSpec(i1, 0x80000000), android.view.View.MeasureSpec.makeMeasureSpec(0, 0));
int j1 = Math.max(0, i1 - sPadding);
mOnAirWrap = false;
int k1 = mTypeView.getVisibility();
int l1 = 0;
int i2 = 0;
int j2;
int k2;
int l2;
int i3;
boolean flag;
if(k1 != 8)
{
mTypeView.measure(android.view.View.MeasureSpec.makeMeasureSpec(j1, 0), android.view.View.MeasureSpec.makeMeasureSpec(0, 0));
if(mTypeView.getMeasuredWidth() > j1)
flag = true;
else
flag = false;
mOnAirWrap = flag;
if(mOnAirWrap)
mTypeView.measure(android.view.View.MeasureSpec.makeMeasureSpec(i1, 0x80000000), android.view.View.MeasureSpec.makeMeasureSpec(0, 0));
i2 = mTypeView.getMeasuredWidth() + sPadding;
l1 = mTypeView.getMeasuredHeight();
}
j2 = mTitleView.getMeasuredWidth();
if(mOnAirWrap)
i2 = 0;
k2 = Math.max(0, i1 - Math.max(j2, i2));
mExpandCollapseTextView.measure(android.view.View.MeasureSpec.makeMeasureSpec(k2, 0x80000000), android.view.View.MeasureSpec.makeMeasureSpec(0, 0));
l2 = l1 + mTitleView.getMeasuredHeight() + sPadding;
i3 = l + Math.max(sAvatarSize - sAvatarOverlap, l2);
mExpandCollapseView.measure(android.view.View.MeasureSpec.makeMeasureSpec(k - sAvatarSize, 0x40000000), android.view.View.MeasureSpec.makeMeasureSpec(i3 - l, 0x40000000));
setMeasuredDimension(k, i3);
}
public void onPrepared(MediaPlayer mediaplayer)
{
mThemeImageView.startFadeOut(750);
mediaplayer.setLooping(true);
mediaplayer.start();
}
public void onRecycle()
{
mTitleView.setText(null);
mVideoThemeUrl = null;
mThemeImageView.onRecycle();
if(mVideoView != null)
mThemeImageView.setAlpha(1.0F);
mExpandCollapseView.setOnClickListener(null);
mAvatar.setOnClickListener(null);
mThemeImageView.setOnImageLoadedListener(null);
if(mVideoView != null)
{
mVideoView.setOnPreparedListener(null);
if(mVideoView.isPlaying())
mVideoView.stopPlayback();
}
mOnClickListener = null;
}
public final void pausePlayback()
{
if(mVideoView != null && mVideoView.isPlaying())
if(mVideoView.canPause())
mVideoView.pause();
else
mVideoView.stopPlayback();
if(mThemeImageView != null && mVideoView != null)
mThemeImageView.setAlpha(1.0F);
}
public void setEventTheme(Theme theme)
{
if(mVideoView == null || theme == null || theme.getImageList() == null) {
;
} else {
ThemeImage themeimage;
for(Iterator iterator = theme.getImageList().iterator(); iterator.hasNext();) {
themeimage = (ThemeImage)iterator.next();
if(!"MOV".equals(themeimage.getFormat()) || !"LARGE".equals(themeimage.getAspectRatio()) || !themeimage.getUrl().endsWith("mp4")) {
continue;
} else {
mVideoThemeUrl = themeimage.getUrl();
}
}
}
mThemeImageView.setEventTheme(theme);
}
public void setExpandState(boolean flag)
{
int i;
TextView textview;
String s;
if(flag)
i = R.drawable.icn_events_arrow_up;
else
i = R.drawable.icn_events_arrow_down;
mChevronResId = i;
textview = mExpandCollapseTextView;
if(flag)
s = sCollapseText;
else
s = sExpandText;
textview.setText(s);
mExpandCollapseChevronView.setImageResource(mChevronResId);
if(mActionListener != null)
mActionListener.onExpansionToggled(flag);
}
public void setLayoutType(boolean flag)
{
TextView textview = mExpandCollapseTextView;
int i;
if(flag)
i = 0;
else
i = 8;
textview.setVisibility(i);
}
}