/** * galaxy inc. * meetup client for android */ package com.galaxy.meetup.client.android.hangout; import java.util.Iterator; import android.content.Context; import android.util.AttributeSet; import android.view.ViewGroup; import android.widget.LinearLayout; import com.galaxy.meetup.client.android.R; /** * * @author sihai * */ public class FilmStripView extends LinearLayout { private final EventHandler eventHandler = new EventHandler(); private HangoutTile hangoutTile; private boolean isResumed; private final int size; public FilmStripView(Context context, AttributeSet attributeset) { super(context, attributeset); size = context.getResources().getDimensionPixelSize(R.dimen.micro_kind_max_dimension); } private void addParticipantVideo(MeetingMember meetingmember) { IncomingVideoView.ParticipantVideoView participantvideoview = new IncomingVideoView.ParticipantVideoView(getContext(), null, meetingmember); participantvideoview.setLayoutParams(new android.widget.LinearLayout.LayoutParams(size, size)); addView(participantvideoview); participantvideoview.setHangoutTile(hangoutTile); participantvideoview.onResume(); } public final void onPause() { isResumed = false; for(int i = 0; i < getChildCount(); i++) { android.view.View view = getChildAt(i); if(view instanceof IncomingVideoView.ParticipantVideoView) ((IncomingVideoView.ParticipantVideoView)view).onPause(); } removeAllViews(); GCommApp.getInstance(getContext()).unregisterForEvents(getContext(), eventHandler, false); } public final void onResume(SelfVideoView selfvideoview) { isResumed = true; if(selfvideoview.getParent() != null) ((ViewGroup)selfvideoview.getParent()).removeView(selfvideoview); for(Iterator iterator = hangoutTile.getGCommNativeWrapper().getMeetingMembersOrderedByEntry().iterator(); iterator.hasNext();) { MeetingMember meetingmember = (MeetingMember)iterator.next(); if(meetingmember.isSelf()) { selfvideoview.setLayoutMode(SelfVideoView.LayoutMode.FIT); selfvideoview.setLayoutParams(new android.widget.LinearLayout.LayoutParams(size, size)); addView(selfvideoview); } else { addParticipantVideo(meetingmember); } } GCommApp.getInstance(getContext()).registerForEvents(getContext(), eventHandler, false); } public void setHangoutTile(HangoutTile hangouttile) { hangoutTile = hangouttile; } //================================================================================================================== // Inner class //================================================================================================================== final class EventHandler extends GCommEventHandler { public final void onMeetingMemberEntered(MeetingMember meetingmember) { if(isResumed) addParticipantVideo(meetingmember); } public final void onMeetingMemberExited(MeetingMember meetingmember) { if(isResumed) { for(int i = 0; i < getChildCount(); i++) { android.view.View view = getChildAt(i); if(view != null && (view instanceof IncomingVideoView.ParticipantVideoView) && ((IncomingVideoView.ParticipantVideoView)view).getMember() == meetingmember) { ((IncomingVideoView.ParticipantVideoView)view).onPause(); removeView(view); } } } } } }