/**
* galaxy inc.
* meetup client for android
*/
package com.galaxy.meetup.client.android.hangout;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.RelativeLayout;
import com.galaxy.meetup.client.android.Intents;
import com.galaxy.meetup.client.android.R;
import com.galaxy.meetup.client.android.content.AudienceData;
import com.galaxy.meetup.client.android.content.EsAccount;
import com.galaxy.meetup.client.android.service.Hangout;
import com.galaxy.meetup.client.android.ui.fragments.AlertFragmentDialog;
import com.galaxy.meetup.client.android.ui.fragments.BlockFragment;
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.Tile;
/**
*
* @author sihai
*
*/
public abstract class HangoutTile extends RelativeLayout implements Tile {
protected List greenRoomParticipants;
protected Hangout.Info hangoutInfo;
protected List listeners;
protected EsAccount mAccount;
protected boolean mHoaConsented;
protected boolean skipGreenRoom;
public HangoutTile(Context context)
{
super(context);
}
public HangoutTile(Context context, AttributeSet attributeset)
{
super(context, attributeset);
}
public HangoutTile(Context context, AttributeSet attributeset, int i)
{
super(context, attributeset, i);
}
private String getString(int i)
{
return getResources().getString(i);
}
public final void addParticipantPresenceListener(Tile.ParticipantPresenceListener participantpresencelistener)
{
if(listeners == null)
listeners = new LinkedList();
listeners.add(participantpresencelistener);
}
public final void blockPerson(Serializable serializable)
{
MeetingMember meetingmember = (MeetingMember)serializable;
GCommNativeWrapper gcommnativewrapper = getGCommNativeWrapper();
Iterator iterator = gcommnativewrapper.getMeetingMembersOrderedByEntry().iterator();
do
{
if(!iterator.hasNext())
break;
MeetingMember meetingmember1 = (MeetingMember)iterator.next();
if(!meetingmember1.getMucJid().equals(meetingmember.getMucJid()))
continue;
gcommnativewrapper.blockMedia(meetingmember1);
break;
} while(true);
EsFragmentActivity esfragmentactivity = (EsFragmentActivity)getContext();
BlockFragment.getInstance(esfragmentactivity, mAccount, meetingmember.getId(), meetingmember.getName(getContext()), false, true).show(esfragmentactivity);
}
public final EsAccount getAccount()
{
return mAccount;
}
public final HashSet getActiveParticipantIds()
{
HashSet hashset = new HashSet();
if(GCommApp.isInstantiated())
{
for(Iterator iterator = getGCommNativeWrapper().getMeetingMembersOrderedByEntry().iterator(); iterator.hasNext(); hashset.add(((MeetingMember)iterator.next()).getId()));
}
return hashset;
}
protected final EsFragmentActivity getEsFragmentActivity()
{
return (EsFragmentActivity)getContext();
}
public final GCommNativeWrapper getGCommNativeWrapper()
{
return GCommApp.getInstance(getContext()).getGCommNativeWrapper();
}
protected final HangoutTileActivity getHangoutTileActivity()
{
return (HangoutTileActivity)getContext();
}
protected final String getWaitingMessage(boolean flag) {
String s = getResources().getString(R.string.hangout_waiting_for_participants);
Intent intent = ((Activity)getContext()).getIntent();
if(!intent.hasExtra("audience") || flag) {
return s;
}
AudienceData audiencedata = (AudienceData)intent.getParcelableExtra("audience");
if(audiencedata.getCircleCount() != 0) {
return s;
}
if(audiencedata.getUserCount() != 1) {
if(audiencedata.getUserCount() == 2)
{
String s2 = getString(R.string.hangout_waiting_for_two_participants);
Object aobj1[] = new Object[1];
aobj1[0] = audiencedata.getUser(0).getName();
s = String.format(s2, aobj1);
} else
if(audiencedata.getUserCount() > 2)
{
String s1 = getString(R.string.hangout_waiting_for_more_than_two_participants);
Object aobj[] = new Object[2];
aobj[0] = audiencedata.getUser(0).getName();
aobj[1] = Integer.valueOf(-1 + audiencedata.getUserCount());
s = String.format(s1, aobj);
}
} else {
String s3 = getString(R.string.hangout_waiting_for_participant);
Object aobj2[] = new Object[1];
aobj2[0] = audiencedata.getUser(0).getName();
s = String.format(s3, aobj2);
}
return s;
}
public void hideChild(View view)
{
}
protected final void inviteMoreParticipants()
{
Activity activity = (Activity)getContext();
String s = getResources().getString(R.string.realtimechat_conversation_invite_menu_item_text);
List list = GCommApp.getInstance(activity).getGCommNativeWrapper().getMeetingMembersOrderedByEntry();
List arraylist = new ArrayList();
Iterator iterator = list.iterator();
do
{
if(!iterator.hasNext())
break;
MeetingMember meetingmember = (MeetingMember)iterator.next();
if(!meetingmember.isSelf())
{
String s1 = "";
if(meetingmember.getVCard() != null)
s1 = meetingmember.getVCard().getFullName();
// TODO
//arraylist.add(ParticipantUtils.makePersonFromParticipant(Data.Participant.newBuilder().setParticipantId(meetingmember.getId()).setFullName(s1).setFirstName(Hangout.getFirstNameFromFullName(s1)).build()));
}
} while(true);
AudienceData audiencedata = new AudienceData(arraylist, null);
activity.startActivityForResult(Intents.getEditAudienceActivityIntent(activity, mAccount, s, audiencedata, 5, false, false, true, true, true), 0);
}
public abstract boolean isTileStarted();
public void onActivityResult(int i, int j, Intent intent)
{
if(i == 0 && j == -1 && intent != null)
{
AudienceData audiencedata = (AudienceData)intent.getParcelableExtra("audience");
boolean flag;
if(hangoutInfo == null || hangoutInfo.getLaunchSource() != Hangout.LaunchSource.Creation || hangoutInfo.getRingInvitees())
flag = true;
else
flag = false;
GCommApp.getInstance(getContext()).getGCommNativeWrapper().inviteToMeeting(audiencedata, "HANGOUT", flag, true);
}
}
public void onCreateOptionsMenu(Menu menu, MenuInflater menuinflater)
{
}
public boolean onOptionsItemSelected(MenuItem menuitem)
{
return false;
}
public void onPrepareOptionsMenu(Menu menu)
{
}
public final void removeParticipantPresenceListener(Tile.ParticipantPresenceListener participantpresencelistener)
{
if(listeners != null)
listeners.remove(participantpresencelistener);
}
protected final void sendInvites()
{
Intent intent = ((Activity)getContext()).getIntent();
if(intent.hasExtra("audience"))
{
AudienceData audiencedata = (AudienceData)intent.getParcelableExtra("audience");
if(audiencedata != null)
GCommApp.getInstance(getContext()).getGCommNativeWrapper().inviteToMeeting(audiencedata, "HANGOUT", hangoutInfo.getRingInvitees(), true);
}
}
public void setHangoutInfo(EsAccount esaccount, Hangout.Info info, List arraylist, boolean flag, boolean flag1)
{
mAccount = esaccount;
hangoutInfo = info;
greenRoomParticipants = arraylist;
skipGreenRoom = flag1;
Log.info("setHangoutInfo: %s", new Object[] {
info
});
if((EsFragmentActivity)getContext() instanceof HangoutActivity)
StressMode.initialize(getContext(), GCommApp.getInstance(getContext()), info);
}
public abstract void setParticipants(HashMap hashmap, HashSet hashset);
public void showChild(View view)
{
}
protected final void showError(int i, boolean flag)
{
showError(getResources().getString(i), flag);
}
protected final void showError(String s, final boolean finishOnOk)
{
Object aobj[] = new Object[2];
aobj[0] = s;
aobj[1] = Boolean.valueOf(finishOnOk);
Log.debug("showError: message=%s finishOnOk=%s", aobj);
if(StressMode.isEnabled())
{
if(finishOnOk)
((Activity)getContext()).finish();
} else
{
AlertFragmentDialog alertfragmentdialog = AlertFragmentDialog.newInstance(null, s, getContext().getResources().getString(R.string.ok), null, 0x1080027);
alertfragmentdialog.setCancelable(false);
alertfragmentdialog.setListener(new AlertFragmentDialog.AlertDialogListener() {
public final void onDialogCanceled(String s1)
{
}
public final void onDialogListClick(int i, Bundle bundle)
{
}
public final void onDialogNegativeClick(String s1)
{
}
public final void onDialogPositiveClick(Bundle bundle, String s1)
{
if(finishOnOk)
getHangoutTileActivity().stopHangoutTile();
}
});
alertfragmentdialog.show(((EsFragmentActivity)getContext()).getSupportFragmentManager(), "error");
}
}
protected final void showHoaNotification(Button button)
{
(new HoaNotificationDialog(button)).show(((EsFragmentActivity)getContext()).getSupportFragmentManager(), "notification");
}
public abstract void transfer();
public abstract void updateMainVideoStreaming();
protected static enum State {
START,
SIGNING_IN,
SIGNIN_ERROR,
READY_TO_LAUNCH_MEETING,
ENTERING_MEETING,
IN_MEETING,
IN_MEETING_WITH_SELF_VIDEO_INSET,
IN_MEETING_WITH_FILM_STRIP;
public final boolean isInMeeting()
{
boolean flag;
if(this == IN_MEETING || this == IN_MEETING_WITH_SELF_VIDEO_INSET || this == IN_MEETING_WITH_FILM_STRIP)
flag = true;
else
flag = false;
return flag;
}
public final boolean isSigningIn()
{
boolean flag;
if(this == SIGNING_IN)
flag = true;
else
flag = false;
return flag;
}
}
public static abstract interface HangoutTileActivity extends BlockFragment.Listener, BlockPersonDialog.PersonBlocker {
public abstract Intent getGreenRoomParticipantListActivityIntent(List arraylist);
public abstract Intent getHangoutNotificationIntent();
public abstract Intent getParticipantListActivityIntent();
public abstract void onMeetingMediaStarted();
public abstract void stopHangoutTile();
}
private final class HoaNotificationDialog extends AlertFragmentDialog {
Button mJoinButton;
public HoaNotificationDialog(Button button) {
super();
mJoinButton = button;
}
public final Dialog onCreateDialog(Bundle bundle) {
Context context = getDialogContext();
View view = LayoutInflater.from(context).inflate(
R.layout.hangout_onair_dialog, null);
CheckBox checkbox = (CheckBox) view
.findViewById(R.id.hangoutOnAirCheckbox);
final AlertDialog alertdialog = (new android.app.AlertDialog.Builder(
context))
.setIcon(0x1080027)
.setView(view)
.setTitle(R.string.hangout_onair_warning_header)
.setPositiveButton(
R.string.hangout_onair_ok_button_text,
new android.content.DialogInterface.OnClickListener() {
public final void onClick(
DialogInterface dialoginterface, int i) {
mHoaConsented = true;
if (mJoinButton.isShown()
&& mJoinButton.isEnabled())
mJoinButton.performClick();
}
})
.setNegativeButton(
R.string.hangout_onair_cancel_button_text, null)
.show();
alertdialog.getButton(-1).setEnabled(checkbox.isChecked());
checkbox.setOnCheckedChangeListener(new android.widget.CompoundButton.OnCheckedChangeListener() {
public final void onCheckedChanged(
CompoundButton compoundbutton, boolean flag) {
alertdialog.getButton(-1).setEnabled(flag);
}
});
return alertdialog;
}
}
}