/** * galaxy inc. * meetup client for android */ package com.galaxy.meetup.client.android.ui.fragments; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.database.MatrixCursor; import android.os.Bundle; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.Loader; import android.util.Log; import android.view.ContextThemeWrapper; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.Button; import android.widget.GridView; import android.widget.ImageButton; import android.widget.ScrollView; import android.widget.TextView; import android.widget.Toast; import com.galaxy.meetup.client.android.EsCursorAdapter; import com.galaxy.meetup.client.android.EsCursorLoader; import com.galaxy.meetup.client.android.Intents; import com.galaxy.meetup.client.android.R; import com.galaxy.meetup.client.android.ShakeDetector; import com.galaxy.meetup.client.android.analytics.OzViews; import com.galaxy.meetup.client.android.content.AudienceData; import com.galaxy.meetup.client.android.content.CircleData; import com.galaxy.meetup.client.android.content.EsAudienceData; import com.galaxy.meetup.client.android.content.EsPeopleData; import com.galaxy.meetup.client.android.content.EsProvider; import com.galaxy.meetup.client.android.content.PersonData; import com.galaxy.meetup.client.android.hangout.GCommApp; import com.galaxy.meetup.client.android.realtimechat.Client; 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.ui.view.HostActionBar; import com.galaxy.meetup.client.android.ui.view.SuggestedPeopleListItemView; import com.galaxy.meetup.client.android.ui.view.TypeableAudienceView; import com.galaxy.meetup.client.util.EsLog; import com.galaxy.meetup.client.util.HelpUrl; import com.galaxy.meetup.client.util.Property; /** * * @author sihai * */ public class HostedHangoutFragment extends HostedEsFragment implements LoaderCallbacks, OnClickListener, OnItemClickListener, PeopleSearchAdapter.SearchListAdapterListener { private static final ActiveHangoutMode ACTIVE_HANGOUT_MODE_DEFAULT; private List displayedSuggestedParticipants; private ActiveHangoutMode mActiveViewMode; private View mAudienceOverlay; protected AudienceData mAudienceResult; protected TypeableAudienceView mAudienceView; private boolean mCacheSuggestionsResponse; private int mCircleUsageType; private boolean mFilterNullGaiaIds; private GridView mGridView; private boolean mIncludePhoneOnlyContacts; private boolean mIncludePlusPages; private TextView mListHeader; private View mListParent; private boolean mPreviouslyAudienceEmpty; private boolean mPreviouslyOvercapacity; private boolean mPublicProfileSearchEnabled; private RTCListener mRealTimeChatListener; private Integer mRequestId; private Button mResumeHangoutButton; private boolean mRingBeforeDisable; protected PeopleSearchListAdapter mSearchListAdapter; private boolean mShakeDetectorWasRunning; private boolean mShowSuggestedPeople; private Button mStartHangoutButton; private List mSuggestedPeople; private SuggestedPeopleAdpater mSuggestedPeopleAdapter; private ScrollView mSuggestedPeopleScrollView; private int mSuggestedPeopleSize; private ImageButton mToggleHangoutRingButton; static { ACTIVE_HANGOUT_MODE_DEFAULT = ActiveHangoutMode.MODE_DISABLE; } public HostedHangoutFragment() { mIncludePhoneOnlyContacts = true; mRealTimeChatListener = new RTCListener(); mRequestId = null; mActiveViewMode = ACTIVE_HANGOUT_MODE_DEFAULT; mSuggestedPeopleSize = 0; mPreviouslyAudienceEmpty = true; mPreviouslyOvercapacity = false; } private void cacheSuggestedResponse(Client.SuggestionsResponse suggestionsresponse) { if(mCacheSuggestionsResponse) { EsAudienceData.processSuggestionsResponse(getActivity(), mAccount, suggestionsresponse); mCacheSuggestionsResponse = false; } } private void disableHangoutRing(boolean flag, boolean flag1) { mRingBeforeDisable = false; mToggleHangoutRingButton.setImageResource(R.drawable.icn_ring_off); mToggleHangoutRingButton.setContentDescription(getString(R.string.hangout_ring_off_content_description)); if(flag1) { int i; if(flag) i = R.string.ring_off_overcapacity_hangout_toast; else i = R.string.ring_off_hangout_toast; toast(i); } } private void enableHangoutRing(boolean flag) { mRingBeforeDisable = true; mToggleHangoutRingButton.setImageResource(R.drawable.icn_ring_on); mToggleHangoutRingButton.setContentDescription(getString(R.string.hangout_ring_on_content_description)); if(flag) toast(R.string.ring_on_hangout_toast); } private boolean isInAudience(String s) { PersonData apersondata[]; apersondata = mAudienceView.getAudience().getUsers(); int length = apersondata.length; String s1; for(int j = 0; j < length; j++) { s1 = ParticipantUtils.getParticipantIdFromPerson(apersondata[j]); if(null != s1 && s1.equals(s)) { return true; } } return false; } private void loadSuggestedPeople(Client.SuggestionsResponse suggestionsresponse) { for(Iterator iterator = suggestionsresponse.getSuggestionList().iterator(); iterator.hasNext();) { Iterator iterator1 = ((Client.Suggestion)iterator.next()).getSuggestedUserList().iterator(); while(iterator1.hasNext()) { Data.Participant participant = (Data.Participant)iterator1.next(); mSuggestedPeople.add(participant); } } updateSuggestedPeopleDisplay(); } private void toast(int i) { String s = getString(i); Toast.makeText(getActivity(), s, 0).show(); } private void updateSuggestedPeopleDisplay() { Iterator iterator = mSuggestedPeople.iterator(); do { if(!iterator.hasNext()) break; Data.Participant participant1 = (Data.Participant)iterator.next(); Iterator iterator2 = displayedSuggestedParticipants.iterator(); boolean flag1; do { boolean flag = iterator2.hasNext(); flag1 = false; if(!flag) break; if(!((Data.Participant)iterator2.next()).getParticipantId().equals(participant1.getParticipantId())) continue; flag1 = true; break; } while(true); if(!flag1) { displayedSuggestedParticipants.add(participant1); if(mListHeader != null && mListHeader.getVisibility() != 0) mListHeader.setVisibility(0); } } while(true); int i = 0; MatrixCursor matrixcursor = new MatrixCursor(SuggestedPeopleQuery.columnNames); Iterator iterator1 = displayedSuggestedParticipants.iterator(); while(iterator1.hasNext()) { Data.Participant participant = (Data.Participant)iterator1.next(); Object aobj[] = new Object[4]; int j = i + 1; aobj[0] = Integer.valueOf(i); aobj[1] = participant.getParticipantId(); aobj[2] = participant.getFullName(); int k; if(isInAudience(participant.getParticipantId())) k = 1; else k = 0; aobj[3] = Integer.valueOf(k); matrixcursor.addRow(aobj); i = j; } mSuggestedPeopleAdapter.swapCursor(matrixcursor); if(mSuggestedPeopleSize != mSuggestedPeopleAdapter.getCount() && mSuggestedPeopleAdapter.getCount() == mGridView.getChildCount()) { mSuggestedPeopleScrollView.scrollTo(0, 0); mSuggestedPeopleSize = mSuggestedPeopleAdapter.getCount(); } } public final boolean audienceSizeIsGreaterThan(int i) { boolean flag = false; AudienceData audiencedata = mAudienceView.getAudience(); if(null == audiencedata) { return false; } int j = audiencedata.getUserCount(); int k = 0; if(j > 0) k = 0 + audiencedata.getUserCount(); CircleData acircledata[] = audiencedata.getCircles(); int l = acircledata.length; for(int i1 = 0; i1 < l; i1++) { CircleData circledata = acircledata[i1]; if(circledata.getType() == 9 || circledata.getType() == 7 || circledata.getType() == 8) { return true; } if(circledata.getSize() > 0) k += circledata.getSize(); } flag = false; if(k > 10) flag = true; return flag; } public final AudienceData getAudience() { return mAudienceView.getAudience(); } protected final void getSuggestedPeople() { AudienceData audiencedata = mAudienceView.getAudience(); boolean flag = isAudienceEmpty(); mCacheSuggestionsResponse = flag; mRequestId = Integer.valueOf(RealTimeChatService.requestSuggestedParticipants(getActivity(), mAccount, audiencedata, Client.SuggestionsRequest.SuggestionsType.HANGOUT)); if(flag) getLoaderManager().initLoader(1, null, this); } public final OzViews getViewForLogging() { return OzViews.HANGOUT; } public final boolean isAudienceEmpty() { boolean flag = true; AudienceData audiencedata = mAudienceView.getAudience(); if(null == audiencedata) { return true; } CircleData acircledata[]; if(audiencedata.getUserCount() > 0) { return false; } acircledata = audiencedata.getCircles(); int length = acircledata.length; for(int j = 0; j < length; j++) { CircleData circledata = acircledata[j]; if(circledata.getSize() > 0 || circledata.getType() == 9 || circledata.getType() == 7) { return false; } } return true; } public final boolean isEmpty() { return false; } public final void onActivityCreated(Bundle bundle) { super.onActivityCreated(bundle); if(bundle == null) { AudienceData audiencedata = (AudienceData)getActivity().getIntent().getParcelableExtra("audience"); if(audiencedata != null) mAudienceView.replaceAudience(audiencedata); } } public final void onActivityResult(int i, int j, Intent intent) { if(i == 1 && j == -1 && intent != null) mAudienceResult = (AudienceData)intent.getParcelableExtra("audience"); } public final void onAddPersonToCirclesAction(String s, String s1, boolean flag) { } public final void onChangeCirclesAction(String s, String s1) { } public final void onCircleSelected(String s, CircleData circledata) { mAudienceView.addCircle(circledata); mAudienceView.clearText(); } public void onClick(View view) { if(view.getId() == R.id.edit_audience) { AudienceData audiencedata = mAudienceView.getAudience(); startActivityForResult(Intents.getEditAudienceActivityIntent(getActivity(), mAccount, getString(R.string.realtimechat_edit_audience_activity_title), audiencedata, mCircleUsageType, mIncludePhoneOnlyContacts, mIncludePlusPages, mPublicProfileSearchEnabled, mFilterNullGaiaIds), 1); } } public final void onCreate(Bundle bundle) { super.onCreate(bundle); mSuggestedPeople = new LinkedList(); displayedSuggestedParticipants = new LinkedList(); String s; if(bundle != null) { if(bundle.containsKey("request_id")) { mRequestId = Integer.valueOf(bundle.getInt("request_id")); mCacheSuggestionsResponse = bundle.getBoolean("cache_suggestions_response"); } else { mRequestId = null; mCacheSuggestionsResponse = false; } mShowSuggestedPeople = bundle.getBoolean("show_suggested_people"); mPublicProfileSearchEnabled = bundle.getBoolean("public_profile_search"); mIncludePhoneOnlyContacts = bundle.getBoolean("phone_only_contacts"); mIncludePlusPages = bundle.getBoolean("plus_pages"); } mCircleUsageType = 10; mIncludePhoneOnlyContacts = false; mIncludePlusPages = false; mPublicProfileSearchEnabled = true; mShowSuggestedPeople = true; mFilterNullGaiaIds = true; s = Property.ACTIVE_HANGOUT_MODE.get(); if("disable".equalsIgnoreCase(s)) mActiveViewMode = ActiveHangoutMode.MODE_DISABLE; else if("hide".equalsIgnoreCase(s)) mActiveViewMode = ActiveHangoutMode.MODE_HIDE; else if("none".equalsIgnoreCase(s)) mActiveViewMode = ActiveHangoutMode.MODE_NONE; else mActiveViewMode = ACTIVE_HANGOUT_MODE_DEFAULT; } public final Loader onCreateLoader(int i, Bundle bundle) { if(EsLog.isLoggable("HangoutFrag", 3)) Log.d("HangoutFrag", (new StringBuilder("onCreateLoader ")).append(i).toString()); EsCursorLoader escursorloader; if(i == 1) { android.net.Uri uri = EsProvider.appendAccountParameter(EsProvider.HANGOUT_SUGGESTIONS_URI, mAccount); escursorloader = new EsCursorLoader(getActivity(), uri, HangoutSuggestionsQuery.PROJECTION, null, null, "sequence ASC", null); } else { escursorloader = null; } return escursorloader; } public final View onCreateView(LayoutInflater layoutinflater, ViewGroup viewgroup, Bundle bundle) { View view = layoutinflater.inflate(R.layout.hosted_hangout_fragment, viewgroup, false); mGridView = (GridView)view.findViewById(0x102000a); mSuggestedPeopleScrollView = (ScrollView)view.findViewById(R.id.suggested_people_scroll_view); mListParent = view.findViewById(R.id.list_layout_parent); mListHeader = (TextView)view.findViewById(R.id.list_header); mGridView.setOnItemClickListener(this); mSuggestedPeopleAdapter = new SuggestedPeopleAdpater(getActivity(), null); mGridView.setAdapter(mSuggestedPeopleAdapter); mToggleHangoutRingButton = (ImageButton)view.findViewById(R.id.toggle_hangout_ring_button); disableHangoutRing(false, false); mToggleHangoutRingButton.setOnClickListener(new android.view.View.OnClickListener() { public final void onClick(View view1) { HostedHangoutFragment.access$500(HostedHangoutFragment.this); } }); mStartHangoutButton = (Button)view.findViewById(R.id.start_hangout_button); mStartHangoutButton.setEnabled(false); mStartHangoutButton.setOnClickListener(new android.view.View.OnClickListener() { public final void onClick(View view1) { startActivity(Intents.getNewHangoutActivityIntent(getActivity(), mAccount, mRingBeforeDisable, getAudience())); } }); mResumeHangoutButton = (Button)view.findViewById(R.id.resume_hangout_button); mResumeHangoutButton.setOnClickListener(new android.view.View.OnClickListener() { public final void onClick(View view1) { GCommApp gcommapp = GCommApp.getInstance(getActivity()); if(gcommapp.isInAHangout()) { Intent intent = gcommapp.getGCommService().getNotificationIntent(); if(intent != null) startActivity(intent); } } }); mAudienceOverlay = view.findViewById(R.id.audience_overlay); mAudienceOverlay.setOnTouchListener(null); mAudienceOverlay.setOnClickListener(null); if(android.os.Build.VERSION.SDK_INT >= 12) mAudienceOverlay.setOnGenericMotionListener(null); mAudienceOverlay.setOnKeyListener(null); mAudienceOverlay.setOnLongClickListener(null); return view; } public final void onDismissSuggestionAction(String s, String s1) { } public void onItemClick(AdapterView adapterview, View view, int i, long l) { mSuggestedPeopleAdapter.onItemClick(i); } public final void onLoadFinished(Loader loader, Object obj) { Cursor cursor = (Cursor)obj; if(EsLog.isLoggable("HangoutFrag", 3)) Log.d("HangoutFrag", (new StringBuilder("onLoadFinished ")).append(loader.getId()).toString()); if(loader.getId() == 1 && cursor != null && cursor.moveToFirst()) { do { Data.Participant participant = Data.Participant.newBuilder().setParticipantId(cursor.getString(1)).setFullName(cursor.getString(2)).setFirstName(cursor.getString(3)).build(); mSuggestedPeople.add(participant); } while(cursor.moveToNext()); updateSuggestedPeopleDisplay(); } } public final void onLoaderReset(Loader loader) { } public final boolean onOptionsItemSelected(MenuItem menuitem) { boolean flag; if(menuitem.getItemId() == R.id.help) { String s = getResources().getString(R.string.url_param_help_hangouts); startExternalActivity(new Intent("android.intent.action.VIEW", HelpUrl.getHelpUrl(getActivity(), s))); flag = true; } else { flag = super.onOptionsItemSelected(menuitem); } return flag; } public final void onPause() { super.onPause(); if(mShowSuggestedPeople) RealTimeChatService.unregisterListener(mRealTimeChatListener); } public final void onPersonSelected(String s, String s1, PersonData persondata) { mAudienceView.addPerson(persondata); mAudienceView.clearText(); } protected final void onPrepareActionBar(HostActionBar hostactionbar) { hostactionbar.showTitle(R.string.home_screen_hangout_label); } public final void onResume() { super.onResume(); mStartHangoutButton.setVisibility(0); mToggleHangoutRingButton.setVisibility(0); mResumeHangoutButton.setVisibility(8); mAudienceOverlay.setVisibility(8); mAudienceView.setVisibility(0); mListParent.setVisibility(0); mListHeader.setText(R.string.realtimechat_users_you_may_know); if(!GCommApp.getInstance(getActivity()).isInAHangout()) { return; } mStartHangoutButton.setVisibility(8); mToggleHangoutRingButton.setVisibility(8); mResumeHangoutButton.setVisibility(0); if(ActiveHangoutMode.MODE_DISABLE == mActiveViewMode) { mAudienceView.setVisibility(4); mListParent.setVisibility(4); } else if(ActiveHangoutMode.MODE_HIDE == mActiveViewMode) { mAudienceOverlay.setVisibility(0); } else { if(mAudienceResult != null) { AudienceData audiencedata = mAudienceResult; mAudienceView.replaceAudience(audiencedata); mAudienceResult = null; } if(mShowSuggestedPeople) RealTimeChatService.registerListener(mRealTimeChatListener); if(mRequestId != null && !RealTimeChatService.isRequestPending(mRequestId.intValue())) { RealTimeChatServiceResult realtimechatserviceresult = RealTimeChatService.removeResult(mRequestId.intValue()); if(realtimechatserviceresult != null && realtimechatserviceresult.getErrorCode() == 1 && realtimechatserviceresult.getCommand() != null && realtimechatserviceresult.getCommand().hasSuggestionsResponse()) { loadSuggestedPeople(realtimechatserviceresult.getCommand().getSuggestionsResponse()); cacheSuggestedResponse(realtimechatserviceresult.getCommand().getSuggestionsResponse()); } } } } public final void onSaveInstanceState(Bundle bundle) { super.onSaveInstanceState(bundle); if(mSearchListAdapter != null) mSearchListAdapter.onSaveInstanceState(bundle); if(mRequestId != null) { bundle.putInt("request_id", mRequestId.intValue()); bundle.putBoolean("cache_suggestions_response", mCacheSuggestionsResponse); } bundle.putBoolean("show_suggested_people", mShowSuggestedPeople); bundle.putBoolean("public_profile_search", mPublicProfileSearchEnabled); bundle.putBoolean("phone_only_contacts", mIncludePhoneOnlyContacts); bundle.putBoolean("plus_pages", mIncludePlusPages); } public final void onSearchListAdapterStateChange(PeopleSearchAdapter peoplesearchadapter) { if(mListParent != null) if(peoplesearchadapter.isEmpty()) mListParent.setVisibility(0); else mListParent.setVisibility(8); } public final void onStart() { super.onStart(); if(mSearchListAdapter != null) mSearchListAdapter.onStart(); ShakeDetector shakedetector = ShakeDetector.getInstance(getActivity()); if(shakedetector != null) mShakeDetectorWasRunning = shakedetector.stop(); } public final void onStop() { super.onStart(); if(mSearchListAdapter != null) mSearchListAdapter.onStop(); if(mShakeDetectorWasRunning) { ShakeDetector shakedetector = ShakeDetector.getInstance(getActivity()); if(shakedetector != null) shakedetector.start(); } } public final void onUnblockPersonAction(String s, boolean flag) { } public final void onViewCreated(View view, Bundle bundle) { super.onViewCreated(view, bundle); mAudienceView = (TypeableAudienceView)view.findViewById(R.id.audience_view); mAudienceView.setEmptyAudienceHint(R.string.realtimechat_new_conversation_hint_text); mSearchListAdapter = new PeopleSearchListAdapter(new ContextThemeWrapper(getActivity(), R.style.CircleBrowserTheme), getFragmentManager(), getLoaderManager(), mAccount); mSearchListAdapter.setIncludePhoneNumberContacts(mIncludePhoneOnlyContacts); mSearchListAdapter.setIncludePlusPages(mIncludePlusPages); mSearchListAdapter.setPublicProfileSearchEnabled(mPublicProfileSearchEnabled); mSearchListAdapter.setCircleUsageType(mCircleUsageType); mSearchListAdapter.setFilterNullGaiaIds(mFilterNullGaiaIds); mSearchListAdapter.setListener(this); mSearchListAdapter.onCreate(bundle); mAudienceView.setAutoCompleteAdapter(mSearchListAdapter); mAudienceView.setAccount(mAccount); mAudienceView.initLoaders(getLoaderManager()); view.findViewById(R.id.edit_audience).setOnClickListener(this); mAudienceView.setAudienceChangedCallback(new Runnable() { public final void run() { boolean flag = true; if(mShowSuggestedPeople) { getSuggestedPeople(); if(mSuggestedPeopleAdapter.isEmpty() && mListHeader != null) mListHeader.setVisibility(8); updateSuggestedPeopleDisplay(); } boolean flag1 = audienceSizeIsGreaterThan(10); boolean flag2 = isAudienceEmpty(); ImageButton imagebutton = mToggleHangoutRingButton; boolean flag3; if(!flag2) flag3 = flag; else flag3 = false; imagebutton.setEnabled(flag3); if(flag2 || flag1) disableHangoutRing(false, false); else if((mPreviouslyAudienceEmpty || mPreviouslyOvercapacity) && !mRingBeforeDisable) enableHangoutRing(false); mPreviouslyAudienceEmpty = flag2; mPreviouslyOvercapacity = flag1; if(mStartHangoutButton != null) { Button button = mStartHangoutButton; if(isAudienceEmpty()) flag = false; button.setEnabled(flag); } } }); if(mShowSuggestedPeople) { if(mSuggestedPeopleAdapter.isEmpty() && mListHeader != null) mListHeader.setVisibility(8); getSuggestedPeople(); } } static void access$500(HostedHangoutFragment hostedhangoutfragment) { if(hostedhangoutfragment.mRingBeforeDisable) { hostedhangoutfragment.disableHangoutRing(false, true); return; } if(hostedhangoutfragment.audienceSizeIsGreaterThan(10)) hostedhangoutfragment.disableHangoutRing(true, true); else if(!hostedhangoutfragment.isAudienceEmpty()) hostedhangoutfragment.enableHangoutRing(true); } //================================================================================== // Inner class //================================================================================== private static enum ActiveHangoutMode { MODE_NONE, MODE_DISABLE, MODE_HIDE; } private static interface HangoutSuggestionsQuery { public static final String PROJECTION[] = { "_id", "participant_id", "full_name", "first_name" }; } private final class RTCListener extends RealTimeChatServiceListener { public final void onResponseReceived$1587694a(int i, RealTimeChatServiceResult realtimechatserviceresult) { if(mRequestId != null && i == mRequestId.intValue() && realtimechatserviceresult.getErrorCode() == 1 && realtimechatserviceresult.getCommand().hasSuggestionsResponse()) { Client.SuggestionsResponse suggestionsresponse = realtimechatserviceresult.getCommand().getSuggestionsResponse(); loadSuggestedPeople(suggestionsresponse); cacheSuggestedResponse(suggestionsresponse); } } public final void onResponseTimeout(int i) { mRequestId.intValue(); } } private final class SuggestedPeopleAdpater extends EsCursorAdapter { final LayoutInflater mLayoutInflater; public SuggestedPeopleAdpater(Context context, Cursor cursor) { super(context, null); mLayoutInflater = (LayoutInflater)context.getSystemService("layout_inflater"); } public final void bindView(View view, Context context, Cursor cursor) { boolean flag = true; SuggestedPeopleListItemView suggestedpeoplelistitemview = (SuggestedPeopleListItemView)view; suggestedpeoplelistitemview.setPersonId(cursor.getString(1)); suggestedpeoplelistitemview.setParticipantName(cursor.getString(2).replaceAll(" .*", "")); if(cursor.getInt(3) <= 0) flag = false; suggestedpeoplelistitemview.setChecked(flag); } public final View newView(Context context, Cursor cursor, ViewGroup viewgroup) { return mLayoutInflater.inflate(R.layout.suggested_people_list_item_view, null); } public final void onItemClick(int i) { String s = null; Cursor cursor = getCursor(); cursor.moveToPosition(i); String s1 = cursor.getString(2); String s2 = cursor.getString(1); String s3; PersonData persondata; if(s2.startsWith("g:")) s3 = EsPeopleData.extractGaiaId(s2); else if(s2.startsWith("e:")) { s = s2.substring(2); s3 = null; } else if(s2.startsWith("p:")) { s = s2; s3 = null; } else { s = null; s3 = null; } persondata = new PersonData(s3, s1, s); if(isInAudience(ParticipantUtils.getParticipantIdFromPerson(persondata))) mAudienceView.removePerson(persondata); else mAudienceView.addPerson(persondata); } } private static interface SuggestedPeopleQuery { public static final String columnNames[] = { "_id", "participant_id", "full_name", "in_audience" }; } }