/** * galaxy inc. * meetup client for android */ package com.galaxy.meetup.client.android.ui.activity; import java.util.ArrayList; import java.util.Collection; import android.content.Intent; import android.content.res.Resources; import android.database.Cursor; import android.os.Bundle; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.Loader; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import com.galaxy.meetup.client.android.EsCursorLoader; import com.galaxy.meetup.client.android.ParticipantHelper; import com.galaxy.meetup.client.android.R; 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.HangoutTile; import com.galaxy.meetup.client.android.realtimechat.Data; import com.galaxy.meetup.client.android.realtimechat.RealTimeChatService; import com.galaxy.meetup.client.android.ui.fragments.EsFragmentActivity; import com.galaxy.meetup.client.util.EsLog; /** * * @author sihai * */ public class ParticipantListActivity extends EsFragmentActivity implements LoaderCallbacks, OnClickListener { private EsAccount mAccount; private long mConversationRowId; private boolean mIsGroup; private boolean mNeedToInviteParticipants; private int mParticipantCount; private Collection mParticipantList; private AudienceData mResultAudience; public ParticipantListActivity() { } private void inviteMoreParticipants() { if(mParticipantList != null) { ParticipantHelper.inviteMoreParticipants(this, mParticipantList, mIsGroup, mAccount, HangoutTile.class.getName().equals(getIntent().getStringExtra("tile"))); mNeedToInviteParticipants = false; } else { mNeedToInviteParticipants = true; } } private void setParticipantCount(int i) { mParticipantCount = i; updateSubtitle(); } 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); } } protected final EsAccount getAccount() { return mAccount; } public final OzViews getViewForLogging() { return OzViews.CONVERSATION_PARTICIPANT_LIST; } public void onActivityResult(int i, int j, Intent intent) { if(i == 1) { if(j == -1 && intent != null) { mResultAudience = (AudienceData)intent.getParcelableExtra("audience"); if(mResultAudience != null && EsLog.isLoggable("ParticipantList", 3)) Log.d("ParticipantList", (new StringBuilder("got audience ")).append(mResultAudience).toString()); } } else { super.onActivityResult(i, j, intent); } } public void onClick(View view) { if(view.getId() == R.id.title_button_1) inviteMoreParticipants(); } protected void onCreate(Bundle bundle) { super.onCreate(bundle); setContentView(R.layout.participant_list_activity); mAccount = (EsAccount)getIntent().getExtras().get("account"); mIsGroup = getIntent().getBooleanExtra("is_group", false); mConversationRowId = getIntent().getLongExtra("conversation_row_id", -1L); if(android.os.Build.VERSION.SDK_INT >= 11) { getActionBar().setDisplayHomeAsUpEnabled(true); } else { showTitlebar(true); createTitlebarButtons(R.menu.participant_list_activity_menu); } getSupportLoaderManager().restartLoader(1, null, this); getSupportLoaderManager().restartLoader(2, null, this); } public final Loader onCreateLoader(int i, Bundle bundle) { 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); 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) { boolean flag; if(android.os.Build.VERSION.SDK_INT >= 11) { getMenuInflater().inflate(R.menu.participant_list_activity_menu, menu); flag = true; } else { flag = false; } return flag; } public final void onLoadFinished(Loader loader, Object obj) { Cursor cursor = (Cursor)obj; if(loader.getId() != 1) { if(loader.getId() == 2) { mParticipantList = new ArrayList(); Data.Participant participant; for(; cursor.moveToNext(); mParticipantList.add(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(cursor != null && cursor.moveToFirst()) setParticipantCount(cursor.getCount()); else setParticipantCount(0); if(mNeedToInviteParticipants) { ParticipantHelper.inviteMoreParticipants(this, mParticipantList, mIsGroup, mAccount, HangoutTile.class.getName().equals(getIntent().getStringExtra("tile"))); mNeedToInviteParticipants = false; } } } else { if(cursor != null && cursor.moveToFirst()) { String s1 = cursor.getString(1); if(s1 == null) s1 = cursor.getString(2); if(android.os.Build.VERSION.SDK_INT < 11) { showTitlebar(true); setTitlebarTitle(s1); } else { getActionBar().setTitle(s1); } updateSubtitle(); } } } public final void onLoaderReset(Loader loader) { } public boolean onOptionsItemSelected(MenuItem menuitem) { int i = menuitem.getItemId(); if(R.id.realtimechat_conversation_invite_menu_item == i) { inviteMoreParticipants(); return false; } else if(0x102002c == i) { goHome(mAccount); return true; } else { return false; } } protected void onPause() { super.onPause(); RealTimeChatService.allowDisconnect(this, mAccount); } protected void onResume() { super.onResume(); if(isIntentAccountActive()) { RealTimeChatService.connectAndStayConnected(this, mAccount); if(mResultAudience != null) { RealTimeChatService.inviteParticipants(this, mAccount, mConversationRowId, mResultAudience); mResultAudience = null; } } else { finish(); } } protected final void onTitlebarLabelClick() { goHome(mAccount); } //================================================================================================================== // Inner class //================================================================================================================== public static interface ConversationQuery { public static final String PROJECTION[] = { "is_group", "name", "generated_name" }; } public static interface ParticipantsQuery { public static final String PROJECTION[] = { "_id", "participant_id", "full_name", "first_name", "type" }; } }