/**
* galaxy inc.
* meetup client for android
*/
package com.galaxy.meetup.client.android.ui.fragments;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView.RecyclerListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.Toast;
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.analytics.OzViews;
import com.galaxy.meetup.client.android.common.Recyclable;
import com.galaxy.meetup.client.android.content.AudienceData;
import com.galaxy.meetup.client.android.content.EsEventData;
import com.galaxy.meetup.client.android.content.EsProvider;
import com.galaxy.meetup.client.android.service.EsService;
import com.galaxy.meetup.client.android.service.EsServiceListener;
import com.galaxy.meetup.client.android.service.ServiceResult;
import com.galaxy.meetup.client.android.ui.view.HostActionBar;
import com.galaxy.meetup.client.android.ui.view.PeopleListItemView;
import com.galaxy.meetup.server.client.domain.PlusEvent;
import com.galaxy.meetup.server.client.util.JsonUtil;
/**
*
* @author sihai
*
*/
public class HostedEventInviteeListFragment extends HostedEsFragment implements
LoaderCallbacks, RecyclerListener, OnItemClickListener, EventInviteeListAdapter.OnActionListener {
private EventInviteeListAdapter mAdapter;
private String mAuthKey;
private Integer mDeleteAddRequestId;
private String mEventId;
private Integer mGetEventRequestId;
private Integer mGetInviteesRequestId;
private final Handler mHandler = new Handler(Looper.getMainLooper());
private Integer mInviteMoreRequestId;
protected ListView mListView;
private final EsServiceListener mListener = new EsServiceListener() {
public final void onEventInviteComplete(int i, ServiceResult serviceresult)
{
handleInviteMoreComplete(i, serviceresult);
}
public final void onEventManageGuestComplete(int i, ServiceResult serviceresult)
{
handleAddRemoveGuestCallback(i, serviceresult);
}
public final void onGetEventComplete(int i, ServiceResult serviceresult)
{
handleGetEventCallback(i, serviceresult);
}
public final void onGetEventInviteesComplete(int i, ServiceResult serviceresult)
{
handleGetEventInviteesCallback(i, serviceresult);
}
public final void onRemovePeopleRequestComplete(int i, ServiceResult serviceresult)
{
handleAddRemoveGuestCallback(i, serviceresult);
}
};
private String mOwnerId;
private PlusEvent mPlusEvent;
private boolean mRefreshNeeded;
public HostedEventInviteeListFragment()
{
}
private void handleGetEventCallback(int i, ServiceResult serviceresult)
{
if(mGetEventRequestId != null)
mGetEventRequestId.intValue();
if(!serviceresult.hasError())
getLoaderManager().restartLoader(0, null, this);
mGetEventRequestId = null;
updateRefreshStatus();
}
private void handleInviteMoreComplete(int i, ServiceResult serviceresult)
{
if(mInviteMoreRequestId != null && i == mInviteMoreRequestId.intValue())
{
DialogFragment dialogfragment = (DialogFragment)getFragmentManager().findFragmentByTag("req_pending");
if(dialogfragment != null)
dialogfragment.dismiss();
mInviteMoreRequestId = null;
if(serviceresult != null && serviceresult.hasError())
Toast.makeText(getActivity(), R.string.transient_server_error, 0).show();
else
refresh(2);
}
}
private void refresh(int i)
{
if((i == 1 || i == 0) && mGetEventRequestId == null)
mGetEventRequestId = Integer.valueOf(EsService.getEvent(getActivity(), getAccount(), mEventId));
if((i == 2 || i == 0) && mGetInviteesRequestId == null)
mGetInviteesRequestId = Integer.valueOf(EsService.getEventInvitees(getActivity(), getAccount(), mEventId, mAuthKey, true));
updateRefreshStatus();
}
private void showProgressDialog(int i)
{
ProgressFragmentDialog.newInstance(null, getString(i), false).show(getFragmentManager(), "req_pending");
}
private void updateRefreshStatus()
{
if(getActionBar() != null)
if(mGetEventRequestId != null || mGetInviteesRequestId != null)
getActionBar().showProgressIndicator();
else
getActionBar().hideProgressIndicator();
if(mGetEventRequestId == null && mGetInviteesRequestId == null)
mRefreshNeeded = false;
}
public final OzViews getViewForLogging()
{
return null;
}
protected final void handleAddRemoveGuestCallback(int i, ServiceResult serviceresult)
{
if(mDeleteAddRequestId != null && i == mDeleteAddRequestId.intValue()) {
DialogFragment dialogfragment = (DialogFragment)getFragmentManager().findFragmentByTag("req_pending");
if(dialogfragment != null)
dialogfragment.dismiss();
mDeleteAddRequestId = null;
if(serviceresult != null && serviceresult.hasError())
Toast.makeText(getActivity(), R.string.transient_server_error, 0).show();
}
}
protected final void handleGetEventInviteesCallback(int i, ServiceResult serviceresult)
{
if(mGetInviteesRequestId != null && mGetInviteesRequestId.intValue() == i)
{
if(mGetEventRequestId == null)
mRefreshNeeded = false;
if(!serviceresult.hasError())
getLoaderManager().restartLoader(1, null, this);
mGetInviteesRequestId = null;
updateRefreshStatus();
}
}
protected final boolean isEmpty()
{
boolean flag;
if(mPlusEvent == null)
flag = true;
else
flag = false;
return flag;
}
public final void onActionButtonClicked(int i)
{
if(0 == i) {
startActivityForResult(Intents.getEditAudienceActivityIntent(getActivity(), getAccount(), getString(R.string.event_invite_activity_title), null, 11, false, false, true, false), 0);
}
}
public final void onActivityResult(int i, int j, Intent intent)
{
if(j == -1) {
switch(i)
{
case 0: // '\0'
final AudienceData audience = (AudienceData)intent.getParcelableExtra("audience");
mHandler.post(new Runnable() {
public final void run()
{
HostedEventInviteeListFragment.access$400(HostedEventInviteeListFragment.this, audience);
}
});
break;
}
}
}
public final void onAttach(Activity activity)
{
super.onAttach(activity);
mAdapter = new EventInviteeListAdapter(activity);
mAdapter.setOnActionListener(this);
}
public final void onCreate(Bundle bundle)
{
super.onCreate(bundle);
mRefreshNeeded = true;
if(bundle != null)
{
if(bundle.containsKey("id"))
mEventId = bundle.getString("id");
if(bundle.containsKey("ownerid"))
mOwnerId = bundle.getString("ownerid");
if(bundle.containsKey("invitemoreid"))
mInviteMoreRequestId = Integer.valueOf(bundle.getInt("invitemoreid"));
if(bundle.containsKey("inviteesreq"))
mGetInviteesRequestId = Integer.valueOf(bundle.getInt("inviteesreq"));
if(bundle.containsKey("eventreq"))
mGetEventRequestId = Integer.valueOf(bundle.getInt("eventreq"));
if(bundle.containsKey("eventaddremovereq"))
mDeleteAddRequestId = Integer.valueOf(bundle.getInt("eventaddremovereq"));
if(bundle.containsKey("inviteesrefreshneeded"))
mRefreshNeeded = bundle.getBoolean("inviteesrefreshneeded");
}
mAdapter.setViewerGaiaId(getAccount().getGaiaId());
mAdapter.setEventOwnerId(mOwnerId);
if(mRefreshNeeded)
refresh();
}
public final Loader onCreateLoader(int i, Bundle bundle)
{
Loader loader = null;
final android.support.v4.app.FragmentActivity final_context1 = getActivity();
if(0 == i) {
loader = new EsCursorLoader(final_context1, EsProvider.EVENTS_ALL_URI) ;
} else if(1 == i) {
loader = new EventInviteeListLoader(getActivity(), getAccount(), mEventId, mOwnerId);
}
return loader;
}
public final View onCreateView(LayoutInflater layoutinflater, ViewGroup viewgroup, Bundle bundle)
{
View view = layoutinflater.inflate(R.layout.people_list_fragment, viewgroup, false);
mListView = (ListView)view.findViewById(0x102000a);
mListView.setAdapter(mAdapter);
mListView.setOnItemClickListener(this);
mListView.setRecyclerListener(this);
getLoaderManager().restartLoader(0, null, this);
getLoaderManager().restartLoader(1, null, this);
return view;
}
public void onItemClick(AdapterView adapterview, View view, int i, long l)
{
if(view instanceof PeopleListItemView)
{
String s = ((PeopleListItemView)view).getGaiaId();
if(s != null)
startActivity(Intents.getProfileActivityByGaiaIdIntent(getActivity(), getAccount(), s, null));
}
}
public final void onLoadFinished(Loader loader, Object obj)
{
Cursor cursor = (Cursor)obj;
int id = loader.getId();
if(0 == id) {
if(cursor.moveToFirst())
{
mPlusEvent = (PlusEvent)JsonUtil.fromByteArray(cursor.getBlob(1), PlusEvent.class);
mAuthKey = mPlusEvent.authKey;
invalidateActionBar();
}
} else if(1 == id) {
mAdapter.swapCursor(cursor);
}
}
public final void onLoaderReset(Loader loader)
{
}
public void onMovedToScrapHeap(View view)
{
if(view instanceof Recyclable)
((Recyclable)view).onRecycle();
}
public final void onPause()
{
EsService.unregisterListener(mListener);
onPause();
}
protected final void onPrepareActionBar(HostActionBar hostactionbar)
{
if(EsEventData.canInviteOthers(mPlusEvent, mAccount))
hostactionbar.showActionButton(0, R.drawable.icn_events_rsvp_invite_more, R.string.event_button_invite_more_label);
hostactionbar.showRefreshButton();
if(mPlusEvent != null)
hostactionbar.showTitle(mPlusEvent.name);
updateRefreshStatus();
onPrepareActionBar(hostactionbar);
}
public final void onReInviteInvitee(String s, String s1)
{
showProgressDialog(R.string.event_reinviting_invitee);
mDeleteAddRequestId = Integer.valueOf(EsService.manageEventGuest(getActivity(), getAccount(), mEventId, mAuthKey, false, s, s1));
}
public final void onRemoveInvitee(String s, String s1)
{
showProgressDialog(R.string.event_removing_invitee);
mDeleteAddRequestId = Integer.valueOf(EsService.manageEventGuest(getActivity(), getAccount(), mEventId, mAuthKey, true, s, s1));
}
public final void onResume()
{
onResume();
EsService.registerListener(mListener);
if(mInviteMoreRequestId != null && !EsService.isRequestPending(mInviteMoreRequestId.intValue()))
{
ServiceResult serviceresult3 = EsService.removeResult(mInviteMoreRequestId.intValue());
handleInviteMoreComplete(mInviteMoreRequestId.intValue(), serviceresult3);
mInviteMoreRequestId = null;
}
if(mGetInviteesRequestId != null && !EsService.isRequestPending(mGetInviteesRequestId.intValue()))
{
ServiceResult serviceresult2 = EsService.removeResult(mGetInviteesRequestId.intValue());
handleGetEventInviteesCallback(mGetInviteesRequestId.intValue(), serviceresult2);
mGetInviteesRequestId = null;
}
if(mGetEventRequestId != null && !EsService.isRequestPending(mGetEventRequestId.intValue()))
{
ServiceResult serviceresult1 = EsService.removeResult(mGetEventRequestId.intValue());
handleGetEventCallback(mGetEventRequestId.intValue(), serviceresult1);
mGetEventRequestId = null;
}
if(mDeleteAddRequestId != null && !EsService.isRequestPending(mDeleteAddRequestId.intValue()))
{
ServiceResult serviceresult = EsService.removeResult(mDeleteAddRequestId.intValue());
handleAddRemoveGuestCallback(mDeleteAddRequestId.intValue(), serviceresult);
mDeleteAddRequestId = null;
}
if(mRefreshNeeded)
refresh();
}
public final void onSaveInstanceState(Bundle bundle)
{
onSaveInstanceState(bundle);
bundle.putString("id", mEventId);
bundle.putString("ownerid", mOwnerId);
if(mInviteMoreRequestId != null)
bundle.putInt("invitemoreid", mInviteMoreRequestId.intValue());
if(mGetInviteesRequestId != null)
bundle.putInt("inviteesreq", mGetInviteesRequestId.intValue());
if(mGetEventRequestId != null)
bundle.putInt("eventreq", mGetEventRequestId.intValue());
if(mDeleteAddRequestId != null)
bundle.putInt("eventaddremovereq", mDeleteAddRequestId.intValue());
bundle.putBoolean("inviteesrefreshneeded", mRefreshNeeded);
}
protected final void onSetArguments(Bundle bundle)
{
onSetArguments(bundle);
mEventId = bundle.getString("event_id");
mOwnerId = bundle.getString("owner_id");
mAuthKey = bundle.getString("auth_key");
}
public final void refresh()
{
refresh();
refresh(0);
}
static void access$400(HostedEventInviteeListFragment hostedeventinviteelistfragment, AudienceData audiencedata)
{
if(hostedeventinviteelistfragment.getActivity() != null && hostedeventinviteelistfragment.mEventId != null && hostedeventinviteelistfragment.mOwnerId != null)
{
hostedeventinviteelistfragment.showProgressDialog(R.string.event_inviting_more);
hostedeventinviteelistfragment.mInviteMoreRequestId = Integer.valueOf(EsService.invitePeopleToEvent(hostedeventinviteelistfragment.getActivity(), hostedeventinviteelistfragment.getAccount(), hostedeventinviteelistfragment.mEventId, hostedeventinviteelistfragment.mAuthKey, hostedeventinviteelistfragment.mOwnerId, audiencedata));
}
return;
}
}