/** * galaxy inc. * meetup client for android */ package com.galaxy.meetup.client.android.ui.activity; import android.app.Dialog; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.MenuItem; import android.widget.Toast; import com.galaxy.meetup.client.android.Intents; import com.galaxy.meetup.client.android.R; import com.galaxy.meetup.client.android.analytics.OzActions; import com.galaxy.meetup.client.android.analytics.OzViews; import com.galaxy.meetup.client.android.content.AudienceData; import com.galaxy.meetup.client.android.content.EsAccount; import com.galaxy.meetup.client.android.hangout.GCommApp; import com.galaxy.meetup.client.android.hangout.HangoutTile; import com.galaxy.meetup.client.android.hangout.Log; import com.galaxy.meetup.client.android.realtimechat.Client; import com.galaxy.meetup.client.android.realtimechat.CreateConversationOperation; import com.galaxy.meetup.client.android.realtimechat.RealTimeChatService; import com.galaxy.meetup.client.android.realtimechat.RealTimeChatServiceListener; import com.galaxy.meetup.client.android.realtimechat.RealTimeChatServiceResult; import com.galaxy.meetup.client.android.service.EsService; import com.galaxy.meetup.client.android.ui.fragments.AudienceFragment; import com.galaxy.meetup.client.android.ui.fragments.ComposeMessageFragment; import com.galaxy.meetup.client.android.ui.fragments.EsFragmentActivity; import com.galaxy.meetup.client.util.ImageUtils; import com.galaxy.meetup.client.util.ImageUtils.InsertCameraPhotoDialogDisplayer; /** * * @author sihai * */ public class NewConversationActivity extends EsFragmentActivity implements InsertCameraPhotoDialogDisplayer { private static int sInstanceCount; private EsAccount mAccount; private AudienceFragment mAudienceFragment; private ComposeMessageFragment mComposeMessageFragment; private Integer mCreateConversationRequestId; private final RTCServiceListener mRTCServiceListener = new RTCServiceListener(); public NewConversationActivity() { mCreateConversationRequestId = null; } public static boolean hasInstance() { boolean flag; if(sInstanceCount > 0) flag = true; else flag = false; return flag; } private void updateAllowSendMessage() { if(mComposeMessageFragment != null) { ComposeMessageFragment composemessagefragment = mComposeMessageFragment; boolean flag; if(mAudienceFragment != null && !mAudienceFragment.isAudienceEmpty()) flag = true; else flag = false; composemessagefragment.setAllowSendMessage(flag); } } protected final EsAccount getAccount() { return mAccount; } public final OzViews getViewForLogging() { return OzViews.CONVERSATION_START_NEW; } public final void hideInsertCameraPhotoDialog() { dismissDialog(0x7f0a003e); } public final void onAttachFragment(Fragment fragment) { if(!(fragment instanceof ComposeMessageFragment)) { mComposeMessageFragment = (ComposeMessageFragment)fragment; updateAllowSendMessage(); mComposeMessageFragment.allowSendingImages(false); mComposeMessageFragment.setListener(new ComposeMessageFragment.Listener() { public final void onSendPhoto(String paramString, int paramInt) { } public final void onSendTextMessage(String paramString) { NewConversationActivity.access$300(NewConversationActivity.this, paramString); } public final void onTypingStatusChanged(Client.Typing.Type paramType) { } }); } else { if(fragment instanceof AudienceFragment) { mAudienceFragment = (AudienceFragment)fragment; mAudienceFragment.setCirclesUsageType(6); mAudienceFragment.setIncludePhoneOnlyContacts(true); mAudienceFragment.setIncludePlusPages(false); mAudienceFragment.setPublicProfileSearchEnabled(true); mAudienceFragment.setShowSuggestedPeople(true); updateAllowSendMessage(); mAudienceFragment.setAudienceChangedCallback(new Runnable() { public final void run() { if(mComposeMessageFragment != null) { ComposeMessageFragment composemessagefragment = mComposeMessageFragment; boolean flag; if(!mAudienceFragment.isAudienceEmpty()) flag = true; else flag = false; composemessagefragment.setAllowSendMessage(flag); } } }); } } } public void onBackPressed() { recordUserAction(OzActions.CONVERSATION_ABORT_NEW); onBackPressed(); } protected void onCreate(Bundle bundle) { onCreate(bundle); setContentView(R.layout.new_conversation_activity); mAccount = EsService.getActiveAccount(this); if(android.os.Build.VERSION.SDK_INT < 11) { showTitlebar(true); setTitlebarTitle(getString(R.string.new_huddle_label)); } int i; if(bundle != null) if(bundle.containsKey("requestId")) mCreateConversationRequestId = Integer.valueOf(bundle.getInt("requestId")); else mCreateConversationRequestId = null; i = 1 + sInstanceCount; sInstanceCount = i; if(i > 1) Log.error((new StringBuilder("NewConversationActivity onCreate instanceCount out of sync: ")).append(sInstanceCount).toString()); } public Dialog onCreateDialog(int i, Bundle bundle) { Dialog dialog; if(i == 0x7f0a003e) dialog = ImageUtils.createInsertCameraPhotoDialog(this); else dialog = onCreateDialog(i, bundle); return dialog; } protected void onDestroy() { onDestroy(); int i = -1 + sInstanceCount; sInstanceCount = i; if(i < 0) { Log.error((new StringBuilder("NewConversationActivity onDestroy instanceCount out of sync: ")).append(sInstanceCount).toString()); sInstanceCount = 0; } } public boolean onOptionsItemSelected(MenuItem menuitem) { boolean flag; if(menuitem.getItemId() == 0x102002c) { goHome(mAccount); flag = true; } else { flag = false; } return flag; } protected void onPause() { onPause(); RealTimeChatService.unregisterListener(mRTCServiceListener); RealTimeChatService.allowDisconnect(this, mAccount); } protected void onResume() { onResume(); if(isIntentAccountActive()) { RealTimeChatService.registerListener(mRTCServiceListener); RealTimeChatService.connectAndStayConnected(this, mAccount); } else { finish(); } } public void onSaveInstanceState(Bundle bundle) { onSaveInstanceState(bundle); if(mCreateConversationRequestId != null) bundle.putInt("requestId", mCreateConversationRequestId.intValue()); } protected void onStart() { onStart(); if(android.os.Build.VERSION.SDK_INT >= 11) getActionBar().setDisplayHomeAsUpEnabled(true); } protected final void onTitlebarLabelClick() { goHome(mAccount); } public final void showInsertCameraPhotoDialog() { showDialog(0x7f0a003e); } static void access$300(NewConversationActivity newconversationactivity, String s) { AudienceData audiencedata = newconversationactivity.mAudienceFragment.getAudience(); newconversationactivity.mCreateConversationRequestId = Integer.valueOf(RealTimeChatService.createConversation(newconversationactivity, newconversationactivity.mAccount, audiencedata, s)); return; } //================================================================================================================== // Inner class //================================================================================================================== private final class RTCServiceListener extends RealTimeChatServiceListener { public final void onConversationCreated(int i, CreateConversationOperation.ConversationResult conversationresult, RealTimeChatServiceResult realtimechatserviceresult) { boolean flag = true; if(i == mCreateConversationRequestId.intValue()) if(realtimechatserviceresult.getErrorCode() == 1) { Intent intent; if(conversationresult.mConversation == null || conversationresult.mConversation.getParticipantCount() <= 1) flag = false; if(HangoutTile.class.getName().equals(getIntent().getStringExtra("tile"))) { GCommApp.getInstance(NewConversationActivity.this).exitMeeting(); intent = Intents.getConversationActivityHangoutTileIntent(NewConversationActivity.this, mAccount, conversationresult.mConversationRowId.longValue(), flag); } else { intent = Intents.getConversationActivityIntent(NewConversationActivity.this, mAccount, conversationresult.mConversationRowId.longValue(), flag); } startActivity(intent); finish(); } else if(realtimechatserviceresult.getErrorCode() == 4) Toast.makeText(NewConversationActivity.this, R.string.conversation_too_large, 0).show(); else Toast.makeText(NewConversationActivity.this, R.string.error_creating_conversation, 0).show(); } } }