/**
* galaxy inc.
* meetup client for android
*/
package com.galaxy.meetup.client.android.ui.activity;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import android.app.ActionBar;
import android.app.Dialog;
import android.content.Intent;
import android.content.res.Resources;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.support.v4.app.Fragment;
import android.support.v4.app.LoaderManager;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.Toast;
import com.galaxy.meetup.client.android.EsCursorLoader;
import com.galaxy.meetup.client.android.Intents;
import com.galaxy.meetup.client.android.ParticipantHelper;
import com.galaxy.meetup.client.android.R;
import com.galaxy.meetup.client.android.ShakeDetector;
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.content.EsConversationsData;
import com.galaxy.meetup.client.android.content.EsProvider;
import com.galaxy.meetup.client.android.hangout.GCommApp;
import com.galaxy.meetup.client.android.hangout.HangoutPhoneTile;
import com.galaxy.meetup.client.android.hangout.HangoutTabletTile;
import com.galaxy.meetup.client.android.hangout.HangoutTile;
import com.galaxy.meetup.client.android.hangout.HangoutTile.HangoutTileActivity;
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.Data;
import com.galaxy.meetup.client.android.realtimechat.ParticipantUtils;
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.Hangout;
import com.galaxy.meetup.client.android.ui.fragments.ComposeMessageFragment;
import com.galaxy.meetup.client.android.ui.fragments.ConversationRenameDialog;
import com.galaxy.meetup.client.android.ui.fragments.EsFragmentActivity;
import com.galaxy.meetup.client.android.ui.fragments.MessageListFragment;
import com.galaxy.meetup.client.android.ui.fragments.ParticipantsGalleryFragment;
import com.galaxy.meetup.client.android.ui.view.ConversationTile;
import com.galaxy.meetup.client.android.ui.view.ParticipantsGalleryView;
import com.galaxy.meetup.client.android.ui.view.Tile;
import com.galaxy.meetup.client.util.ImageUtils;
import com.galaxy.meetup.client.util.ImageUtils.InsertCameraPhotoDialogDisplayer;
/**
*
* @author sihai
*
*/
public class ConversationActivity extends EsFragmentActivity implements
LoaderCallbacks, OnClickListener, HangoutTileActivity,
MessageListFragment.LeaveConversationListener,
InsertCameraPhotoDialogDisplayer {
static final boolean $assertionsDisabled;
private static int sInstanceCount;
private final Tile.ParticipantPresenceListener conversationParticipantPresenceListener = new ConversationParticipantPresenceListener();
private EsAccount mAccount;
private boolean mAdvancedHangoutsEnabled;
private boolean mCheckExtraTile;
private ComposeMessageFragment mComposeMessageFragment;
private ParticipantsGalleryFragment mConversationHeader;
private String mConversationId;
private String mConversationName;
private Long mConversationRowId;
private ConversationTile mConversationTile;
private int mCreateConversationRequestId;
private Tile mCurrentTile;
private long mEarliestEventTimestamp;
private long mFirstEventTimestamp;
private int mFirstHangoutMenuItemIndex;
private HangoutTile mHangoutTile;
private boolean mIsConversationLoaded;
private boolean mIsGroup;
private boolean mIsMuted;
private int mLastHangoutMenuItemIndex;
private MessageListFragment mMessageListFragment;
private boolean mNeedToInviteParticipants;
private int mParticipantCount;
private HashMap mParticipantList;
private final RTCServiceListener mRealTimeChatListener = new RTCServiceListener();
private AudienceData mResultAudience;
private View mRootView;
private boolean mShakeDetectorWasRunning;
private Data.Participant mSingleParticipant;
private LinearLayout mTileContainer;
private MenuItem mTileSelectorMenuItem;
static
{
boolean flag;
if(!ConversationActivity.class.desiredAssertionStatus())
flag = true;
else
flag = false;
$assertionsDisabled = flag;
}
public ConversationActivity()
{
}
public static boolean hasInstance()
{
boolean flag;
if(sInstanceCount > 0)
flag = true;
else
flag = false;
return flag;
}
private void initHangoutTile() {
try {
Hangout.Info info;
if(null == mHangoutTile) {
Hangout.SupportStatus supportstatus = Hangout.getSupportedStatus(this, mAccount);
if(mConversationId.startsWith("c:") || supportstatus != Hangout.SupportStatus.SUPPORTED)
return;
else {
GCommApp.getInstance(this).getGCommNativeWrapper().getCurrentState();
android.widget.LinearLayout.LayoutParams layoutparams;
if(mAdvancedHangoutsEnabled)
mHangoutTile = new HangoutTabletTile(this);
else
mHangoutTile = (new HangoutPhoneTile(this)).setInnerActionBarEnabled(false);
mHangoutTile.onCreate(null);
layoutparams = new android.widget.LinearLayout.LayoutParams(-1, -1);
mHangoutTile.setLayoutParams(layoutparams);
mTileContainer.addView(mHangoutTile);
mHangoutTile.addParticipantPresenceListener(conversationParticipantPresenceListener);
mHangoutTile.onStart();
if(android.os.Build.VERSION.SDK_INT >= 11)
invalidateOptionsMenu();
else
createTitlebarButtons(R.menu.conversation_activity_menu);
}
}
info = new Hangout.Info(Hangout.RoomType.EXTERNAL, null, "messenger", mConversationId, null, Hangout.LaunchSource.Messenger, false);
mHangoutTile.setHangoutInfo(mAccount, info, new ArrayList(mParticipantList.values()), false, false);
if(mCheckExtraTile)
{
mCheckExtraTile = false;
if(shouldShowHangoutTile() && mCurrentTile == mConversationTile || mCurrentTile == mHangoutTile)
toggleTiles();
}
} catch (LinkageError linkageerror) {
Log.error("Could not load hangout native library");
linkageerror.printStackTrace();
}
}
private void initialize()
{
Log.error("initialize");
mParticipantList = null;
mConversationId = null;
mCheckExtraTile = true;
mConversationRowId = null;
mIsConversationLoaded = false;
Intent intent = getIntent();
mAccount = (EsAccount)intent.getParcelableExtra("account");
mIsGroup = intent.getBooleanExtra("is_group", false);
if(!$assertionsDisabled && mConversationHeader == null)
throw new AssertionError();
mConversationHeader.setAccount(mAccount);
long l = intent.getLongExtra("conversation_row_id", -1L);
if(l != -1L)
mConversationRowId = Long.valueOf(l);
mSingleParticipant = (Data.Participant)intent.getSerializableExtra("participant");
if(mSingleParticipant == null) {
getSupportLoaderManager().restartLoader(1, null, this);
getSupportLoaderManager().restartLoader(2, null, this);
mConversationTile.setConversationRowId(mConversationRowId);
if(mConversationHeader != null)
mConversationHeader.setParticipantListButtonVisibility(true);
if(mComposeMessageFragment != null)
mComposeMessageFragment.allowSendingImages(true);
} else {
mParticipantList = new HashMap();
mParticipantList.put(mSingleParticipant.getParticipantId(), mSingleParticipant);
displayParticipantsInTray();
setConversationLabel(mSingleParticipant.getFullName());
if(mConversationHeader != null)
mConversationHeader.setParticipantListButtonVisibility(false);
if(mComposeMessageFragment != null)
mComposeMessageFragment.allowSendingImages(false);
}
mConversationHeader.setCommandListener(new ParticipantsCommandListener(mConversationHeader.getParticipantsGalleryView()));
return;
}
private void inviteMoreParticipants()
{
OzActions ozactions;
if(mIsGroup)
ozactions = OzActions.GROUP_CONVERSATION_ADD_PEOPLE;
else
ozactions = OzActions.ONE_ON_ONE_CONVERSATION_ADD_PEOPLE;
recordUserAction(ozactions);
if(mParticipantList != null && mIsConversationLoaded)
{
java.util.Collection collection = mParticipantList.values();
boolean flag = mIsGroup;
EsAccount esaccount = mAccount;
boolean flag1;
if(mCurrentTile == mHangoutTile)
flag1 = true;
else
flag1 = false;
ParticipantHelper.inviteMoreParticipants(this, collection, flag, esaccount, flag1);
mNeedToInviteParticipants = false;
} else
{
mNeedToInviteParticipants = true;
}
}
private MenuItem prepareToggleTilesMenu(Menu menu)
{
MenuItem menuitem = menu.findItem(R.id.realtimechat_conversation_toggle_tile_menu_item);
if(mHangoutTile != null)
{
boolean flag;
int i;
if(mCurrentTile == mHangoutTile)
flag = true;
else
flag = false;
if(flag)
i = R.drawable.ic_speech_bubble;
else
i = R.drawable.ic_menu_hangout;
menuitem.setIcon(i);
menuitem.setVisible(true);
menuitem.setEnabled(true);
if(!flag)
{
for(int j = mFirstHangoutMenuItemIndex; j < mLastHangoutMenuItemIndex; j++)
menu.getItem(j).setVisible(false);
}
} else
{
menuitem.setEnabled(false);
menuitem.setVisible(false);
}
if(android.os.Build.VERSION.SDK_INT < 11)
menuitem = null;
return menuitem;
}
private void setConversationLabel(String s)
{
if(android.os.Build.VERSION.SDK_INT < 11)
{
showTitlebar(true);
setTitlebarTitle(s);
} else
{
getActionBar().setTitle(s);
}
mConversationName = s;
}
private boolean shouldShowHangoutTile()
{
boolean flag;
if(getIntent().hasExtra("tile") && HangoutTile.class.getName().equals(getIntent().getStringExtra("tile")))
flag = true;
else
flag = false;
return flag;
}
private void updateSubtitle()
{
boolean flag = mIsGroup;
String s = null;
if(flag)
{
int i = mParticipantCount;
s = null;
if(i > 0)
{
Resources resources = getResources();
int j = R.string.participant_count;
Object aobj[] = new Object[1];
aobj[0] = Integer.valueOf(mParticipantCount);
s = resources.getString(j, aobj);
}
}
if(android.os.Build.VERSION.SDK_INT < 11)
{
showTitlebar(true);
setTitlebarSubtitle(s);
} else
{
getActionBar().setSubtitle(s);
}
}
public final void blockPerson(Serializable serializable)
{
if(mHangoutTile != null)
mHangoutTile.blockPerson(serializable);
}
public final void displayParticipantsInTray()
{
if(mParticipantList != null)
if(mCurrentTile == mConversationTile)
{
HashSet hashset = new HashSet();
if(mHangoutTile != null)
hashset = mHangoutTile.getActiveParticipantIds();
mConversationHeader.setParticipants(mParticipantList, mConversationTile.getActiveParticipantIds(), hashset);
} else
{
mHangoutTile.setParticipants(mParticipantList, mConversationTile.getActiveParticipantIds());
}
}
public final EsAccount getAccount()
{
return mAccount;
}
public final Intent getGreenRoomParticipantListActivityIntent(List arraylist)
{
return getParticipantListActivityIntent();
}
public final Intent getHangoutNotificationIntent()
{
return Intents.getConversationActivityHangoutTileIntent(this, mAccount, mConversationRowId.longValue(), mIsGroup);
}
public final Intent getParticipantListActivityIntent()
{
EsAccount esaccount = mAccount;
long l = mConversationRowId.longValue();
String s = mConversationName;
boolean flag = mIsGroup;
boolean flag1;
if(mCurrentTile == mHangoutTile)
flag1 = true;
else
flag1 = false;
return Intents.getParticipantListActivityIntent(this, esaccount, l, s, flag, flag1);
}
public final OzViews getViewForLogging()
{
OzViews ozviews;
if(getIntent().getExtras().getBoolean("is_group"))
ozviews = OzViews.CONVERSATION_GROUP;
else
ozviews = OzViews.CONVERSATION_ONE_ON_ONE;
return ozviews;
}
public final void hideInsertCameraPhotoDialog()
{
dismissDialog(0x7f0a003e);
}
public final void leaveConversation()
{
if(!$assertionsDisabled && mConversationId == null)
throw new AssertionError();
GCommApp gcommapp = GCommApp.getInstance(this);
if(gcommapp.isInHangout(new Hangout.Info(Hangout.RoomType.EXTERNAL, null, "messenger", mConversationId, null, Hangout.LaunchSource.Messenger, false)))
gcommapp.exitMeeting();
}
protected final boolean needsAsyncData()
{
return true;
}
public void onActivityResult(int i, int j, Intent intent)
{
if(i == 1)
{
if(j == -1 && intent != null)
mResultAudience = (AudienceData)intent.getParcelableExtra("audience");
} else
{
super.onActivityResult(i, j, intent);
}
}
public final void onAttachFragment(Fragment fragment) {
if((fragment instanceof ComposeMessageFragment)) {
mComposeMessageFragment = (ComposeMessageFragment)fragment;
if(mConversationRowId == null)
mComposeMessageFragment.allowSendingImages(false);
else
mComposeMessageFragment.allowSendingImages(true);
mComposeMessageFragment.setListener(new ComposeMessageFragment.Listener() {
public final void onSendPhoto(String s, int i) {
ConversationActivity conversationactivity = ConversationActivity.this;
OzActions ozactions;
if(1 == i) {
if(mIsGroup)
ozactions = OzActions.GROUP_CONVERSATION_CHOOSE_PHOTO;
else
ozactions = OzActions.ONE_ON_ONE_CONVERSATION_CHOOSE_PHOTO;
conversationactivity.recordUserAction(ozactions);
} else if(2 == i) {
if(mIsGroup)
ozactions = OzActions.GROUP_CONVERSATION_TAKE_PHOTO;
else
ozactions = OzActions.ONE_ON_ONE_CONVERSATION_TAKE_PHOTO;
conversationactivity.recordUserAction(ozactions);
}
if(s.startsWith("content://"))
RealTimeChatService.sendLocalPhoto(ConversationActivity.this, mAccount, mConversationRowId.longValue(), s);
else
RealTimeChatService.sendMessage(ConversationActivity.this, mAccount, mConversationRowId.longValue(), null, s);
return;
}
public final void onSendTextMessage(String s)
{
ConversationActivity conversationactivity = ConversationActivity.this;
OzActions ozactions;
if(mIsGroup)
ozactions = OzActions.GROUP_CONVERSATION_POST;
else
ozactions = OzActions.ONE_ON_ONE_CONVERSATION_POST;
conversationactivity.recordUserAction(ozactions);
if(mConversationRowId != null)
{
RealTimeChatService.sendMessage(ConversationActivity.this, mAccount, mConversationRowId.longValue(), s, null);
} else
{
AudienceData audiencedata = new AudienceData(ParticipantUtils.makePersonFromParticipant(mSingleParticipant));
mCreateConversationRequestId = RealTimeChatService.createConversation(ConversationActivity.this, mAccount, audiencedata, s);
}
}
public final void onTypingStatusChanged(Client.Typing.Type type)
{
if(mConversationRowId != null)
RealTimeChatService.sendTypingRequest(ConversationActivity.this, mAccount, mConversationRowId.longValue(), type);
}
});
} else if(fragment instanceof MessageListFragment) {
mMessageListFragment = (MessageListFragment)fragment;
mMessageListFragment.setLeaveConversationListener(this);
if(mConversationId != null)
mMessageListFragment.setConversationInfo(mConversationId, mFirstEventTimestamp, mEarliestEventTimestamp);
mMessageListFragment.setParticipantList(mParticipantList);
} else if(fragment instanceof ParticipantsGalleryFragment) {
if(fragment instanceof ParticipantsGalleryFragment)
{
mConversationHeader = (ParticipantsGalleryFragment)fragment;
if(!$assertionsDisabled && mAccount != null)
throw new AssertionError();
}
}
}
public final void onBlockCompleted(boolean flag)
{
}
public void onClick(View view)
{
if(view.getId() == R.id.title_button_1)
toggleTiles();
}
protected void onCreate(Bundle bundle)
{
super.onCreate(bundle);
mAdvancedHangoutsEnabled = Hangout.isAdvancedUiSupported(this);
FrameLayout framelayout = new FrameLayout(this) {
protected void onMeasure(int j, int k)
{
access$600(ConversationActivity.this, k);
super.onMeasure(j, k);
}
};
framelayout.setLayoutParams(new android.view.ViewGroup.LayoutParams(-1, -1));
getLayoutInflater().inflate(R.layout.conversation_activity, framelayout, true);
mRootView = framelayout;
setContentView(mRootView);
Log.debug("ConversationActivity.onCreate");
mTileContainer = (LinearLayout)findViewById(R.id.tile_container);
mConversationTile = (ConversationTile)findViewById(R.id.conversation_tile);
mConversationTile.addParticipantPresenceListener(conversationParticipantPresenceListener);
mCurrentTile = mConversationTile;
mParticipantCount = 0;
ShakeDetector shakedetector;
int i;
if(android.os.Build.VERSION.SDK_INT < 11)
{
showTitlebar(true);
createTitlebarButtons(R.menu.conversation_activity_menu);
} else
{
getActionBar().setDisplayHomeAsUpEnabled(true);
}
shakedetector = ShakeDetector.getInstance(getApplicationContext());
if(shakedetector != null)
mShakeDetectorWasRunning = shakedetector.stop();
initialize();
i = 1 + sInstanceCount;
sInstanceCount = i;
if(i > 1)
Log.error((new StringBuilder("ConversationActivity 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 = super.onCreateDialog(i, bundle);
return dialog;
}
public final Loader onCreateLoader(int i, Bundle bundle)
{
Log.debug((new StringBuilder("ConversationActivity.onCreateLoader: ")).append(i).toString());
EsCursorLoader escursorloader;
if(i == 1)
{
android.net.Uri uri1 = EsProvider.appendAccountParameter(EsProvider.CONVERSATIONS_URI, mAccount);
String as2[] = ConversationQuery.PROJECTION;
String as3[] = new String[1];
as3[0] = String.valueOf(mConversationRowId);
escursorloader = new EsCursorLoader(this, uri1, as2, "_id=?", as3, null);
} else
if(i == 2)
{
android.net.Uri uri = EsProvider.buildParticipantsUri(mAccount, mConversationRowId.longValue());
String as[] = ParticipantsQuery.PROJECTION;
String as1[] = new String[1];
as1[0] = mAccount.getRealTimeChatParticipantId();
escursorloader = new EsCursorLoader(this, uri, as, "participant_id!=? AND active=1", as1, "first_name ASC");
} else
{
escursorloader = null;
}
return escursorloader;
}
public boolean onCreateOptionsMenu(Menu menu)
{
MenuInflater menuinflater = getMenuInflater();
menuinflater.inflate(R.menu.conversation_activity_menu, menu);
if(android.os.Build.VERSION.SDK_INT >= 11)
{
menu.findItem(R.id.realtimechat_conversation_toggle_tile_menu_item).setShowAsAction(2);
menu.findItem(R.id.realtimechat_conversation_invite_menu_item).setShowAsAction(2);
}
mFirstHangoutMenuItemIndex = menu.size();
if(mHangoutTile != null)
mHangoutTile.onCreateOptionsMenu(menu, menuinflater);
mLastHangoutMenuItemIndex = menu.size();
return true;
}
protected void onDestroy()
{
super.onDestroy();
if(mShakeDetectorWasRunning)
{
ShakeDetector shakedetector = ShakeDetector.getInstance(getApplicationContext());
if(shakedetector != null)
shakedetector.start();
}
int i = -1 + sInstanceCount;
sInstanceCount = i;
if(i < 0)
Log.error((new StringBuilder("ConversationActivity onDestroy instanceCount out of sync: ")).append(sInstanceCount).toString());
}
public final void onLoadFinished(Loader loader, Object obj)
{
boolean flag;
Cursor cursor;
flag = true;
cursor = (Cursor)obj;
if(loader.getId() != 1) {
if(loader.getId() == 2)
{
mParticipantCount = cursor.getCount();
updateSubtitle();
mParticipantList = new HashMap();
Data.Participant participant;
for(; cursor.moveToNext(); mParticipantList.put(participant.getParticipantId(), participant))
{
Data.Participant.Builder builder = Data.Participant.newBuilder();
String s = cursor.getString(3);
if(s != null)
builder.setFirstName(s);
participant = builder.setFullName(cursor.getString(2)).setParticipantId(cursor.getString(1)).setType(EsConversationsData.convertParticipantType(cursor.getInt(4))).build();
}
if(mConversationId != null)
initHangoutTile();
displayParticipantsInTray();
if(mNeedToInviteParticipants)
{
java.util.Collection collection = mParticipantList.values();
boolean flag1 = mIsGroup;
EsAccount esaccount = mAccount;
if(mCurrentTile != mHangoutTile)
flag = false;
ParticipantHelper.inviteMoreParticipants(this, collection, flag1, esaccount, flag);
mNeedToInviteParticipants = false;
}
if(mMessageListFragment != null)
mMessageListFragment.setParticipantList(mParticipantList);
}
} else {
if(cursor != null && cursor.moveToFirst())
{
String s1 = cursor.getString(3);
if(s1 == null)
s1 = cursor.getString(4);
boolean flag2;
boolean flag3;
final int fatalErrorType;
if(cursor.getInt(2) != 0)
flag2 = flag;
else
flag2 = false;
mIsGroup = flag2;
if(cursor.getInt(1) != 0)
flag3 = flag;
else
flag3 = false;
mIsMuted = flag3;
mConversationId = cursor.getString(0);
mFirstEventTimestamp = cursor.getLong(5);
mEarliestEventTimestamp = cursor.getLong(6);
setConversationLabel(s1);
updateSubtitle();
fatalErrorType = cursor.getInt(7);
if(fatalErrorType != 0)
(new Handler(Looper.getMainLooper())).post(new Runnable() {
public final void run()
{
LoaderManager loadermanager = getSupportLoaderManager();
if(loadermanager != null)
loadermanager.destroyLoader(1);
mMessageListFragment.handleFatalError(fatalErrorType);
}
});
mIsConversationLoaded = flag;
if(android.os.Build.VERSION.SDK_INT >= 11)
invalidateOptionsMenu();
if(mNeedToInviteParticipants)
inviteMoreParticipants();
mConversationHeader.setParticipantListButtonVisibility(flag);
if(mMessageListFragment != null)
mMessageListFragment.setConversationInfo(mConversationId, mFirstEventTimestamp, mEarliestEventTimestamp);
if(mParticipantList != null)
initHangoutTile();
}
}
}
public final void onLoaderReset(Loader loader)
{
}
public final void onMeetingMediaStarted()
{
HashMap hashmap = new HashMap();
hashmap.put("AUTHOR_PROFILE_ID", mAccount.getPersonId());
RealTimeChatService.sendTileEvent(this, mAccount, mConversationId, "com.google.hangouts", 0, "JOIN_HANGOUT", hashmap);
}
public void onNewIntent(Intent intent)
{
super.onNewIntent(intent);
setIntent(intent);
Log.debug("ConversationActivity.onNewIntent");
initialize();
mMessageListFragment.reinitialize();
}
public boolean onOptionsItemSelected(MenuItem menuitem) {
int i = menuitem.getItemId();
if(0x102002c == i) {
goHome(mAccount);
return true;
} else if(R.id.realtimechat_conversation_mute_menu_item == i) {
OzActions ozactions1;
if(mIsGroup)
ozactions1 = OzActions.GROUP_CONVERSATION_MUTE;
else
ozactions1 = OzActions.ONE_ON_ONE_CONVERSATION_MUTE;
recordUserAction(ozactions1);
RealTimeChatService.setConversationMuted(this, mAccount, mConversationRowId.longValue(), true);
mIsMuted = true;
getIntent().putExtra("conversation_is_muted", true);
return false;
} else if(R.id.realtimechat_conversation_unmute_menu_item == i) {
OzActions ozactions;
if(mIsGroup)
ozactions = OzActions.GROUP_CONVERSATION_UNMUTE;
else
ozactions = OzActions.ONE_ON_ONE_CONVERSATION_UNMUTE;
recordUserAction(ozactions);
RealTimeChatService.setConversationMuted(this, mAccount, mConversationRowId.longValue(), false);
mIsMuted = false;
getIntent().putExtra("conversation_is_muted", false);
return false;
} else if(R.id.realtimechat_conversation_leave_menu_item == i) {
if(mMessageListFragment != null)
mMessageListFragment.displayLeaveConversationDialog();
return false;
} else if(R.id.realtimechat_conversation_toggle_tile_menu_item == i) {
toggleTiles();
return false;
} else if(R.id.realtimechat_conversation_edit_name_menu_item == i) {
(new ConversationRenameDialog(mConversationName, mConversationRowId.longValue())).show(getSupportFragmentManager(), "rename_conversation");
return false;
} else if(R.id.realtimechat_conversation_invite_menu_item == i) {
inviteMoreParticipants();
return false;
} else {
if(mHangoutTile == null) {
return false;
}
return mHangoutTile.onOptionsItemSelected(menuitem);
}
}
public void onPause()
{
Log.debug("ConversationActivity.onPause");
RealTimeChatService.registerListener(mRealTimeChatListener);
mCurrentTile.onTilePause();
mConversationTile.onPause();
if(mHangoutTile != null)
mHangoutTile.onPause();
super.onPause();
RealTimeChatService.allowDisconnect(this, mAccount);
}
public boolean onPrepareOptionsMenu(Menu menu) {
if(!mIsConversationLoaded) {
return false;
}
if(null == mConversationRowId) {
menu.findItem(R.id.realtimechat_conversation_invite_menu_item).setVisible(true);
menu.findItem(R.id.realtimechat_conversation_mute_menu_item).setVisible(false);
menu.findItem(R.id.realtimechat_conversation_unmute_menu_item).setVisible(false);
menu.findItem(R.id.realtimechat_conversation_edit_name_menu_item).setVisible(false);
menu.findItem(R.id.realtimechat_conversation_leave_menu_item).setVisible(false);
menu.findItem(R.id.realtimechat_conversation_toggle_tile_menu_item).setVisible(false);
return true;
} else {
menu.findItem(R.id.realtimechat_conversation_invite_menu_item).setVisible(false);
MenuItem menuitem = menu.findItem(R.id.realtimechat_conversation_mute_menu_item);
boolean flag2;
if(!mIsMuted)
flag2 = true;
else
flag2 = false;
menuitem.setVisible(flag2);
menu.findItem(R.id.realtimechat_conversation_unmute_menu_item).setVisible(mIsMuted);
menu.findItem(R.id.realtimechat_conversation_edit_name_menu_item).setVisible(mIsGroup);
menu.findItem(R.id.realtimechat_conversation_leave_menu_item).setVisible(true);
if(android.os.Build.VERSION.SDK_INT >= 11)
{
mTileSelectorMenuItem = prepareToggleTilesMenu(menu);
} else
{
menu.findItem(R.id.realtimechat_conversation_invite_menu_item).setVisible(false);
menu.findItem(R.id.realtimechat_conversation_toggle_tile_menu_item).setVisible(false);
}
if(mHangoutTile != null)
mHangoutTile.onPrepareOptionsMenu(menu);
return true;
}
}
public final void onPrepareTitlebarButtons(Menu menu)
{
menu.findItem(R.id.realtimechat_conversation_invite_menu_item).setVisible(true);
prepareToggleTilesMenu(menu);
menu.findItem(R.id.realtimechat_conversation_mute_menu_item).setVisible(false);
menu.findItem(R.id.realtimechat_conversation_unmute_menu_item).setVisible(false);
menu.findItem(R.id.realtimechat_conversation_edit_name_menu_item).setVisible(false);
menu.findItem(R.id.realtimechat_conversation_leave_menu_item).setVisible(false);
}
public void onResume()
{
super.onResume();
Log.debug("ConversationActivity.onResume");
RealTimeChatService.registerListener(mRealTimeChatListener);
mConversationTile.onResume();
if(mHangoutTile != null)
mHangoutTile.onResume();
mCurrentTile.onTileResume();
if(isIntentAccountActive())
{
if(mComposeMessageFragment != null)
mComposeMessageFragment.setAllowSendMessage(true);
if(mResultAudience != null)
{
RealTimeChatService.inviteParticipants(this, mAccount, mConversationRowId.longValue(), mResultAudience);
mResultAudience = null;
}
RealTimeChatService.connectAndStayConnected(this, mAccount);
displayParticipantsInTray();
} else
{
finish();
}
}
public void onSaveInstanceState(Bundle bundle)
{
super.onSaveInstanceState(bundle);
}
protected void onStart()
{
super.onStart();
Log.debug("ConversationActivity.onStart");
mConversationTile.onStart();
if(mHangoutTile != null)
mHangoutTile.onStart();
mCurrentTile.onTileStart();
mComposeMessageFragment.requestFocus();
}
public void onStop()
{
super.onStop();
Log.debug("ConversationActivity.onStop");
mCurrentTile.onTileStop();
mConversationTile.onStop();
if(mHangoutTile != null)
mHangoutTile.onStop();
}
protected final void onTitlebarLabelClick()
{
goHome(mAccount);
}
public void onWindowFocusChanged(boolean flag)
{
if(flag)
{
RealTimeChatService.setCurrentConversationRowId(mConversationRowId);
if(!shouldShowHangoutTile() && mConversationRowId != null)
RealTimeChatService.markConversationRead(this, mAccount, mConversationRowId.longValue());
} else
{
RealTimeChatService.setCurrentConversationRowId(null);
}
}
public final void showInsertCameraPhotoDialog()
{
showDialog(0x7f0a003e);
}
public final void stopHangoutTile()
{
if(mCurrentTile == mHangoutTile)
toggleTiles();
}
public final void toggleTiles() {
if(!$assertionsDisabled && mHangoutTile == null)
throw new AssertionError();
if(null == mHangoutTile) {
return;
}
Object obj;
if(mCurrentTile == mHangoutTile)
obj = mConversationTile;
else
obj = mHangoutTile;
mCurrentTile.setVisibility(8);
mCurrentTile.onTilePause();
mCurrentTile.onTileStop();
((Tile) (obj)).setVisibility(0);
((Tile) (obj)).onTileStart();
((Tile) (obj)).onTileResume();
mCurrentTile = ((Tile) (obj));
displayParticipantsInTray();
if(android.os.Build.VERSION.SDK_INT >= 11)
{
if(mTileSelectorMenuItem != null)
{
int i;
if(mCurrentTile == mHangoutTile)
i = R.drawable.ic_speech_bubble;
else
i = R.drawable.ic_menu_hangout;
mTileSelectorMenuItem.setIcon(getResources().getDrawable(i));
}
invalidateOptionsMenu();
if(obj == mConversationTile)
{
ActionBar actionbar = getActionBar();
if(actionbar != null)
actionbar.show();
}
} else
{
createTitlebarButtons(R.menu.conversation_activity_menu);
}
}
static void access$600(ConversationActivity conversationactivity, int i)
{
int j = conversationactivity.getWindowManager().getDefaultDisplay().getHeight();
if(android.os.Build.VERSION.SDK_INT >= 11)
{
j -= conversationactivity.getActionBar().getHeight();
android.widget.FrameLayout.LayoutParams layoutparams = new android.widget.FrameLayout.LayoutParams(-1, -1);
conversationactivity.mRootView.setLayoutParams(layoutparams);
if(conversationactivity.mAdvancedHangoutsEnabled && conversationactivity.mCurrentTile == conversationactivity.mHangoutTile)
conversationactivity.mRootView.setPadding(0, 0, 0, 0);
else
conversationactivity.mRootView.setPadding(0, conversationactivity.getActionBar().getHeight(), 0, 0);
}
if((double)android.view.View.MeasureSpec.getSize(i) < 0.80000000000000004D * (double)j)
conversationactivity.mConversationHeader.getView().setVisibility(8);
else
conversationactivity.mConversationHeader.getView().setVisibility(0);
return;
}
//==================================================================================================================
// Inner class
//==================================================================================================================
private final class ConversationParticipantPresenceListener implements Tile.ParticipantPresenceListener {
public final void onParticipantPresenceChanged() {
displayParticipantsInTray();
}
}
public static interface ConversationQuery
{
public static final String PROJECTION[] = {
"conversation_id", "is_muted", "is_group", "name", "generated_name", "first_event_timestamp", "earliest_event_timestamp", "fatal_error_type"
};
}
private final class ParticipantsCommandListener extends ParticipantsGalleryView.SimpleCommandListener
{
public final void onShowParticipantList()
{
if(mParticipantList != null && mIsConversationLoaded)
startActivity(getParticipantListActivityIntent());
}
ParticipantsCommandListener(ParticipantsGalleryView participantsgalleryview)
{
super(participantsgalleryview, mAccount);
}
}
public static interface ParticipantsQuery
{
public static final String PROJECTION[] = {
"_id", "participant_id", "full_name", "first_name", "type"
};
}
private final class RTCServiceListener extends RealTimeChatServiceListener {
public final void onConversationCreated(int i, CreateConversationOperation.ConversationResult conversationresult, RealTimeChatServiceResult realtimechatserviceresult)
{
boolean flag = true;
if(i == mCreateConversationRequestId)
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(ConversationActivity.this).exitMeeting();
intent = Intents.getConversationActivityHangoutTileIntent(ConversationActivity.this, mAccount, conversationresult.mConversationRowId.longValue(), flag);
} else
{
intent = Intents.getConversationActivityIntent(ConversationActivity.this, mAccount, conversationresult.mConversationRowId.longValue(), flag);
}
startActivity(intent);
} else
if(realtimechatserviceresult.getErrorCode() == 4)
Toast.makeText(ConversationActivity.this, R.string.conversation_too_large, 0).show();
else
Toast.makeText(ConversationActivity.this, R.string.error_creating_conversation, 0).show();
}
}
}