/** * galaxy inc. * meetup client for android */ package com.galaxy.meetup.client.android.hangout; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import android.content.Context; import android.util.AttributeSet; import android.view.ContextMenu; import android.view.LayoutInflater; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import com.galaxy.meetup.client.android.Intents; import com.galaxy.meetup.client.android.R; import com.galaxy.meetup.client.android.realtimechat.Data; import com.galaxy.meetup.client.android.ui.fragments.BlockPersonDialog; import com.galaxy.meetup.client.android.ui.fragments.EsFragmentActivity; import com.galaxy.meetup.client.android.ui.view.OverlayedAvatarView; import com.galaxy.meetup.client.android.ui.view.ParticipantsGalleryView; import com.galaxy.meetup.client.android.ui.view.ParticipantsGalleryView.CommandListener; import com.galaxy.meetup.client.util.QuickActions; /** * * @author sihai * */ public class HangoutParticipantsGalleryView extends ParticipantsGalleryView implements CommandListener { static final boolean $assertionsDisabled; private HashMap avatarViewsByMeetingMember; private MeetingMember currentSpeaker; private final EventHandler eventHandler = new EventHandler(); private HangoutTile mHangoutTile; private int mainVideoRequestId; private final List meetingMembers = new ArrayList(); private HashMap meetingMembersByAvatarView; private MeetingMember pinnedVideoMember; static { boolean flag; if(!HangoutParticipantsGalleryView.class.desiredAssertionStatus()) flag = true; else flag = false; $assertionsDisabled = flag; } public HangoutParticipantsGalleryView(Context context, AttributeSet attributeset) { super(context, attributeset); mainVideoRequestId = 0; setCommandListener(this); } private void pinVideo(MeetingMember meetingmember) { if(!$assertionsDisabled && meetingmember == null) { throw new AssertionError(); } else { MeetingMember meetingmember1 = pinnedVideoMember; GCommApp.getInstance(getContext()).setSelectedVideoSource(meetingmember); mHangoutTile.updateMainVideoStreaming(); pinnedVideoMember = meetingmember; setOverlay(meetingmember1); setOverlay(pinnedVideoMember); return; } } private void setCurrentSpeaker(MeetingMember meetingmember) { if(currentSpeaker != null) { OverlayedAvatarView overlayedavatarview1 = (OverlayedAvatarView)avatarViewsByMeetingMember.get(currentSpeaker); if(overlayedavatarview1 != null) setParticipantActive(overlayedavatarview1, true); } if(meetingmember != null && avatarViewsByMeetingMember != null) { OverlayedAvatarView overlayedavatarview = (OverlayedAvatarView)avatarViewsByMeetingMember.get(meetingmember); if(overlayedavatarview != null) setParticipantLoudestSpeaker(overlayedavatarview, true); } currentSpeaker = meetingmember; } private void setOverlay(MeetingMember meetingmember) { if(meetingmember != null && !meetingmember.isSelf()) { OverlayedAvatarView overlayedavatarview = (OverlayedAvatarView)avatarViewsByMeetingMember.get(meetingmember); if(meetingmember == pinnedVideoMember) overlayedavatarview.setOverlayResource(R.drawable.hangout_pin); else if(meetingmember.isMediaBlocked()) overlayedavatarview.setOverlayResource(R.drawable.list_circle_blocked); else if(meetingmember.isVideoPaused()) { overlayedavatarview.setOverlayResource(R.drawable.hangout_video_pause); } else { overlayedavatarview.setOverlayResource(0); if(meetingmember.getCurrentStatus() == MeetingMember.Status.CONNECTING) overlayedavatarview.setParticipantType(1); else overlayedavatarview.setParticipantType(3); } } } private void unpinVideo() { GCommApp.getInstance(getContext()).setSelectedVideoSource(null); mHangoutTile.updateMainVideoStreaming(); MeetingMember meetingmember = pinnedVideoMember; pinnedVideoMember = null; setOverlay(meetingmember); } public final void onAvatarClicked(OverlayedAvatarView overlayedavatarview, Data.Participant participant) { AvatarContextMenuHelper avatarcontextmenuhelper = new AvatarContextMenuHelper((MeetingMember)meetingMembersByAvatarView.get(overlayedavatarview), participant); avatarContextMenuDialog = QuickActions.show(overlayedavatarview, overlayedavatarview, null, avatarcontextmenuhelper, avatarcontextmenuhelper, true, false); } public final void onAvatarDoubleClicked(OverlayedAvatarView overlayedavatarview, Data.Participant participant) { MeetingMember meetingmember = (MeetingMember)meetingMembersByAvatarView.get(overlayedavatarview); if(meetingmember != null) { if(meetingmember == pinnedVideoMember) unpinVideo(); else pinVideo(meetingmember); } else { onAvatarClicked(overlayedavatarview, participant); } } public final void onPause() { GCommApp.getInstance(getContext()).unregisterForEvents(getContext(), eventHandler, false); dismissAvatarMenuDialog(); } public final void onResume() { GCommApp.getInstance(getContext()).registerForEvents(getContext(), eventHandler, false); } public final void onShowParticipantList() { android.content.Intent intent = ((HangoutTile.HangoutTileActivity)getContext()).getParticipantListActivityIntent(); getContext().startActivity(intent); } public void setHangoutTile(HangoutTile hangouttile) { mHangoutTile = hangouttile; } final void setMainVideoRequestId(int i) { if(!$assertionsDisabled && i == 0) { throw new AssertionError(); } else { mainVideoRequestId = i; return; } } public void setParticipants(HashMap hashmap, HashSet hashset) { removeAllParticipants(); pinnedVideoMember = null; avatarViewsByMeetingMember = new HashMap(); meetingMembersByAvatarView = new HashMap(); HashSet hashset1; LayoutInflater layoutinflater; Iterator iterator; if(hashmap != null) hashset1 = new HashSet(hashmap.keySet()); else hashset1 = null; layoutinflater = LayoutInflater.from(getContext()); dismissAvatarMenuDialog(); meetingMembers.clear(); meetingMembers.addAll(GCommApp.getInstance(getContext()).getGCommNativeWrapper().getMeetingMembersOrderedByEntry()); iterator = meetingMembers.iterator(); do { if(!iterator.hasNext()) break; MeetingMember meetingmember1 = (MeetingMember)iterator.next(); String s1 = meetingmember1.getId(); if(!meetingmember1.isSelf()) { Data.Participant participant; OverlayedAvatarView overlayedavatarview; if(hashset1 != null && hashset1.remove(s1)) { participant = (Data.Participant)hashmap.get(s1); } else { Data.Participant.Builder builder = Data.Participant.newBuilder(); builder.setParticipantId(meetingmember1.getId()); participant = builder.build(); } overlayedavatarview = addParticipant(layoutinflater, participant); if(currentSpeaker != null && meetingmember1 == currentSpeaker) setParticipantLoudestSpeaker(overlayedavatarview, true); else setParticipantActive(overlayedavatarview, true); avatarViewsByMeetingMember.put(meetingmember1, overlayedavatarview); meetingMembersByAvatarView.put(overlayedavatarview, meetingmember1); setOverlay(meetingmember1); } } while(true); if(hashset != null) { Iterator iterator2 = hashset.iterator(); do { if(!iterator2.hasNext()) break; String s = (String)iterator2.next(); if(hashset1.remove(s)) setParticipantActive(addParticipant(layoutinflater, (Data.Participant)hashmap.get(s)), false); } while(true); } if(hashset1 != null) { for(Iterator iterator1 = hashset1.iterator(); iterator1.hasNext(); setParticipantActive(addParticipant(layoutinflater, (Data.Participant)hashmap.get((String)iterator1.next())), false)); } MeetingMember meetingmember; if(currentSpeaker != null) if(meetingMembers.contains(currentSpeaker)) setCurrentSpeaker(currentSpeaker); else setCurrentSpeaker(null); meetingmember = GCommApp.getInstance(getContext()).getSelectedVideoSource(); if(meetingmember != null && meetingMembers.contains(meetingmember)) pinVideo(meetingmember); else unpinVideo(); } //================================================================================================================== // Inner class //================================================================================================================== private final class AvatarContextMenuHelper implements android.view.MenuItem.OnMenuItemClickListener, android.view.View.OnCreateContextMenuListener { private final MeetingMember meetingMember; private final Data.Participant participant; AvatarContextMenuHelper(MeetingMember meetingmember, Data.Participant participant1) { super(); meetingMember = meetingmember; participant = participant1; } public final void onCreateContextMenu(ContextMenu contextmenu, View view, android.view.ContextMenu.ContextMenuInfo contextmenuinfo) { boolean flag = true; (new MenuInflater(getContext())).inflate(R.menu.hangout_avatar_tray, contextmenu); MenuItem menuitem = contextmenu.findItem(R.id.menu_hangout_avatar_profile); MenuItem menuitem1 = contextmenu.findItem(R.id.menu_hangout_avatar_pin_video); MenuItem menuitem2 = contextmenu.findItem(R.id.menu_hangout_avatar_unpin_video); MenuItem menuitem3 = contextmenu.findItem(R.id.menu_hangout_avatar_remote_mute); MenuItem menuitem4 = contextmenu.findItem(R.id.menu_hangout_avatar_block); if(meetingMember == null) { menuitem.setTitle(participant.getFullName()); menuitem1.setVisible(false); menuitem2.setVisible(false); menuitem3.setVisible(false); menuitem4.setVisible(false); } else { menuitem.setTitle(meetingMember.getName(getContext())); boolean flag1; if(meetingMember != pinnedVideoMember) menuitem1.setVisible(flag); else menuitem2.setVisible(flag); if(!meetingMember.isMediaBlocked()) flag1 = flag; else flag1 = false; menuitem3.setVisible(flag1); if(meetingMember.isSelfProfile()) { menuitem4.setVisible(false); } else { if(meetingMember.isMediaBlocked()) flag = false; menuitem4.setVisible(flag); } } } public final boolean onMenuItemClick(MenuItem menuitem) { int i = menuitem.getItemId(); if(R.id.menu_hangout_avatar_profile == i) { android.content.Intent intent = Intents.getProfileActivityIntent(getContext(), mHangoutTile.getAccount(), participant.getParticipantId(), null); getContext().startActivity(intent); } else if(R.id.menu_hangout_avatar_pin_video == i) { pinVideo(meetingMember); } else if(R.id.menu_hangout_avatar_unpin_video == i) { unpinVideo(); } else if(R.id.menu_hangout_avatar_remote_mute == i) { GCommApp.getInstance(getContext()).getGCommNativeWrapper().remoteMute(meetingMember); } else { int j = R.id.menu_hangout_avatar_block; if(i != j) return false; else (new BlockPersonDialog(false, meetingMember)).show(((EsFragmentActivity)getContext()).getSupportFragmentManager(), null); } return true; } } private final class EventHandler extends GCommEventHandler { public final void onCurrentSpeakerChanged(MeetingMember meetingmember) { if(pinnedVideoMember != null) setCurrentSpeaker(meetingmember); } public final void onMediaBlock(MeetingMember meetingmember, MeetingMember meetingmember1, boolean flag) { super.onMediaBlock(meetingmember, meetingmember1, flag); setOverlay(meetingmember); setOverlay(meetingmember1); } public final void onVideoPauseStateChanged(MeetingMember meetingmember, boolean flag) { super.onVideoPauseStateChanged(meetingmember, flag); setOverlay(meetingmember); } public final void onVideoSourceChanged(int i, MeetingMember meetingmember, boolean flag) { super.onVideoSourceChanged(i, meetingmember, flag); if(i == mainVideoRequestId && pinnedVideoMember == null) setCurrentSpeaker(meetingmember); } } }