/** * galaxy inc. * meetup client for android */ package com.galaxy.meetup.client.android.ui.view; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import android.app.Dialog; import android.content.Context; import android.content.res.TypedArray; import android.util.AttributeSet; import android.view.ContextMenu; import android.view.GestureDetector; import android.view.LayoutInflater; import android.view.MenuInflater; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.TextView; import com.galaxy.meetup.client.android.Intents; import com.galaxy.meetup.client.android.R; import com.galaxy.meetup.client.android.content.EsAccount; import com.galaxy.meetup.client.android.content.EsConversationsData; import com.galaxy.meetup.client.android.content.EsPeopleData; import com.galaxy.meetup.client.android.realtimechat.Data; import com.galaxy.meetup.client.util.QuickActions; /** * * @author sihai * */ public class ParticipantsGalleryView extends FrameLayout { static final boolean $assertionsDisabled; protected Dialog avatarContextMenuDialog; private EsAccount mAccount; private CommandListener mCommandListener; private TextView mEmptyMessageView; private View mParticipantListButton; private ViewGroup mParticipantTrayAvatars; static { boolean flag; if(!ParticipantsGalleryView.class.desiredAssertionStatus()) flag = true; else flag = false; $assertionsDisabled = flag; } public ParticipantsGalleryView(Context context) { this(context, null); } public ParticipantsGalleryView(Context context, AttributeSet attributeset) { super(context, attributeset); LayoutInflater.from(context).inflate(R.layout.participants_gallery_view, this, true); mEmptyMessageView = (TextView)findViewById(R.id.empty_message); mParticipantTrayAvatars = (ViewGroup)findViewById(R.id.participant_tray_avatars); mParticipantListButton = findViewById(R.id.show_participant_list_button); if(attributeset != null) { TypedArray typedarray = context.obtainStyledAttributes(attributeset, R.styleable.ParticipantsGalleryFragment); setBackgroundColor(typedarray.getColor(0, 0)); String s = typedarray.getString(1); mEmptyMessageView.setText(s); } mParticipantListButton.setOnClickListener(new android.view.View.OnClickListener() { public final void onClick(View view) { if(mCommandListener != null) mCommandListener.onShowParticipantList(); } }); } public final OverlayedAvatarView addParticipant(LayoutInflater layoutinflater, Data.Participant participant) { if(mAccount == null) throw new IllegalStateException("#setAccount needs to be called first"); mEmptyMessageView.setVisibility(8); mParticipantTrayAvatars.setVisibility(0); OverlayedAvatarView overlayedavatarview = OverlayedAvatarView.create(layoutinflater, mParticipantTrayAvatars); overlayedavatarview.setTag(participant); overlayedavatarview.setParticipantType(EsConversationsData.convertParticipantType(participant)); String s; if(participant.hasParticipantId()) s = EsPeopleData.extractGaiaId(participant.getParticipantId()); else s = null; overlayedavatarview.setParticipantGaiaId(s); mParticipantTrayAvatars.addView(overlayedavatarview); overlayedavatarview.setOnTouchListener(new TouchListener(overlayedavatarview)); overlayedavatarview.setContentDescription(participant.getFullName()); return overlayedavatarview; } public final void addParticipants(List arraylist) { LayoutInflater layoutinflater = LayoutInflater.from(getContext()); for(Iterator iterator = arraylist.iterator(); iterator.hasNext(); addParticipant(layoutinflater, (Data.Participant)iterator.next())); } public final void dismissAvatarMenuDialog() { if(avatarContextMenuDialog != null) { avatarContextMenuDialog.dismiss(); avatarContextMenuDialog = null; } } public final void removeAllParticipants() { mEmptyMessageView.setVisibility(0); mParticipantTrayAvatars.removeAllViews(); mParticipantTrayAvatars.setVisibility(8); } public void setAccount(EsAccount esaccount) { if(!$assertionsDisabled && mAccount != null && !mAccount.equals(esaccount)) { throw new AssertionError(); } else { mAccount = esaccount; return; } } public void setBackgroundColor(int i) { findViewById(R.id.root_view).setBackgroundColor(i); } public void setCommandListener(CommandListener commandlistener) { mCommandListener = commandlistener; } public void setEmptyMessage(String s) { mEmptyMessageView.setText(s); } public void setParticipantActive(OverlayedAvatarView overlayedavatarview, boolean flag) { int i; if(flag) i = R.color.participants_gallery_active_border; else i = 0; overlayedavatarview.setBorderResource(i); } public void setParticipantActive(String s, boolean flag) { int count = mParticipantTrayAvatars.getChildCount(); for(int i = 0; i < count; i++) { OverlayedAvatarView overlayedavatarview = (OverlayedAvatarView)mParticipantTrayAvatars.getChildAt(i); if(null != overlayedavatarview) { Data.Participant participant = (Data.Participant)overlayedavatarview.getTag(); if(null != participant && participant.getParticipantId().equals(s)) { setParticipantActive(overlayedavatarview, flag); } } } } public void setParticipantListButtonVisibility(boolean flag) { View view = mParticipantListButton; int i; if(flag) i = 0; else i = 8; view.setVisibility(i); } public void setParticipantLoudestSpeaker(OverlayedAvatarView overlayedavatarview, boolean flag) { int i; if(flag) i = R.color.participants_gallery_loudest_speaker_border; else i = 0; overlayedavatarview.setBorderResource(i); } public void setParticipants(HashMap hashmap, HashSet hashset, HashSet hashset1) { removeAllParticipants(); HashSet hashset2 = new HashSet(hashmap.keySet()); LayoutInflater layoutinflater = LayoutInflater.from(getContext()); dismissAvatarMenuDialog(); Iterator iterator = hashset.iterator(); do { if(!iterator.hasNext()) break; String s1 = (String)iterator.next(); if(hashset2.remove(s1)) setParticipantActive(addParticipant(layoutinflater, (Data.Participant)hashmap.get(s1)), true); } while(true); Iterator iterator1 = hashset1.iterator(); do { if(!iterator1.hasNext()) break; String s = (String)iterator1.next(); if(hashset2.remove(s)) setParticipantActive(addParticipant(layoutinflater, (Data.Participant)hashmap.get(s)), false); } while(true); for(Iterator iterator2 = hashset2.iterator(); iterator2.hasNext(); setParticipantActive(addParticipant(layoutinflater, (Data.Participant)hashmap.get((String)iterator2.next())), false)); } //================================================================================================================== // Inner class //================================================================================================================== private static final class AvatarContextMenuHelper implements android.view.ContextMenu.ContextMenuInfo, android.view.MenuItem.OnMenuItemClickListener, android.view.View.OnCreateContextMenuListener { private final EsAccount mAccount; private final Context mContext; private final Data.Participant mParticipant; AvatarContextMenuHelper(Context context, EsAccount esaccount, Data.Participant participant) { mContext = context; mAccount = esaccount; mParticipant = participant; } public final void onCreateContextMenu(ContextMenu contextmenu, View view, android.view.ContextMenu.ContextMenuInfo contextmenuinfo) { (new MenuInflater(mContext)).inflate(R.menu.conversation_avatar_menu, contextmenu); MenuItem menuitem = contextmenu.findItem(R.id.menu_avatar_profile); menuitem.setTitle(mParticipant.getFullName()); menuitem.setOnMenuItemClickListener(this); } public final boolean onMenuItemClick(MenuItem menuitem) { android.content.Intent intent = Intents.getProfileActivityIntent(mContext, mAccount, mParticipant.getParticipantId(), null); mContext.startActivity(intent); return true; } } public static interface CommandListener { public abstract void onAvatarClicked(OverlayedAvatarView overlayedavatarview, Data.Participant participant); public abstract void onAvatarDoubleClicked(OverlayedAvatarView overlayedavatarview, Data.Participant participant); public abstract void onShowParticipantList(); } public static class SimpleCommandListener implements CommandListener { private final EsAccount mAccount; private final ParticipantsGalleryView mView; public SimpleCommandListener(ParticipantsGalleryView participantsgalleryview, EsAccount esaccount) { if(participantsgalleryview == null) throw new IllegalArgumentException("view is null"); if(esaccount == null) { throw new IllegalArgumentException("account is null"); } else { mView = participantsgalleryview; mAccount = esaccount; return; } } public final void onAvatarClicked(OverlayedAvatarView overlayedavatarview, Data.Participant participant) { AvatarContextMenuHelper avatarcontextmenuhelper = new AvatarContextMenuHelper(mView.getContext(), mAccount, participant); mView.avatarContextMenuDialog = QuickActions.show(overlayedavatarview, overlayedavatarview, avatarcontextmenuhelper, avatarcontextmenuhelper, avatarcontextmenuhelper, true, false); } public final void onAvatarDoubleClicked(OverlayedAvatarView overlayedavatarview, Data.Participant participant) { onAvatarClicked(overlayedavatarview, participant); } public void onShowParticipantList() { throw new IllegalStateException("onShowParticipantList is not supported"); } } private final class TouchListener extends android.view.GestureDetector.SimpleOnGestureListener implements android.view.View.OnTouchListener { private final OverlayedAvatarView avatarView; private final GestureDetector gestureDetector; TouchListener(OverlayedAvatarView overlayedavatarview) { super(); gestureDetector = new GestureDetector(getContext(), this); avatarView = overlayedavatarview; gestureDetector.setOnDoubleTapListener(this); } public final boolean onDoubleTap(MotionEvent motionevent) { if(mCommandListener != null) { Data.Participant participant = (Data.Participant)avatarView.getTag(); mCommandListener.onAvatarDoubleClicked(avatarView, participant); } return true; } public final boolean onDown(MotionEvent motionevent) { return true; } public final boolean onSingleTapConfirmed(MotionEvent motionevent) { if(getParent() != null && getVisibility() == 0 && avatarView.getParent() != null && mCommandListener != null) { Data.Participant participant = (Data.Participant)avatarView.getTag(); mCommandListener.onAvatarClicked(avatarView, participant); } return true; } public final boolean onTouch(View view, MotionEvent motionevent) { return gestureDetector.onTouchEvent(motionevent); } } }