/**
* galaxy inc.
* meetup client for android
*/
package com.galaxy.meetup.client.android.ui.fragments;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Intent;
import android.database.DataSetObserver;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AbsListView.RecyclerListener;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.galaxy.meetup.client.android.Intents;
import com.galaxy.meetup.client.android.R;
import com.galaxy.meetup.client.android.common.Recyclable;
import com.galaxy.meetup.client.android.content.EsAccount;
import com.galaxy.meetup.client.android.content.EsPeopleData;
import com.galaxy.meetup.client.android.service.EsService;
import com.galaxy.meetup.client.android.service.EsServiceListener;
import com.galaxy.meetup.client.android.service.ImageCache;
import com.galaxy.meetup.client.android.service.ServiceResult;
/**
*
* @author sihai
*
*/
public abstract class EsPeopleListFragment extends EsFragment implements
OnScrollListener, RecyclerListener, OnItemClickListener {
protected ImageCache mAvatarCache;
private final DataSetObserver mCircleContentObserver = new DataSetObserver() {
public final void onChanged()
{
if(mListView != null)
mListView.invalidate();
updateView(getView());
}
};
protected CircleNameResolver mCircleNameResolver;
private final Handler mHandler = new Handler();
protected ListView mListView;
protected Integer mPendingRequestId;
private final EsServiceListener mServiceListener = new EsServiceListener() {
public final void onAddPeopleToCirclesComplete(int i, ServiceResult serviceresult)
{
handleServiceCallback(i, serviceresult);
}
public final void onCircleSyncComplete(int i, ServiceResult serviceresult)
{
handleServiceCallback(i, serviceresult);
}
public final void onDismissSuggestedPeopleRequestComplete(int i, ServiceResult serviceresult)
{
handleServiceCallback(i, serviceresult);
}
public final void onEventManageGuestComplete(int i, ServiceResult serviceresult)
{
handleServiceCallback(i, serviceresult);
}
public final void onRemovePeopleRequestComplete(int i, ServiceResult serviceresult)
{
handleServiceCallback(i, serviceresult);
}
public final void onSetCircleMembershipComplete(int i, ServiceResult serviceresult)
{
handleServiceCallback(i, serviceresult);
}
};
public EsPeopleListFragment()
{
}
protected final void addCircleMembership(String s, String s1, ArrayList arraylist)
{
mPendingRequestId = EsService.setCircleMembership(getActivity(), getAccount(), s, s1, (String[])arraylist.toArray(new String[0]), null);
ProgressFragmentDialog.newInstance(null, getString(EsPeopleData.getMembershipChangeMessageId(arraylist, null)), false).show(getFragmentManager(), "req_pending");
}
protected EsAccount getAccount()
{
return (EsAccount)getActivity().getIntent().getParcelableExtra("account");
}
protected abstract ListAdapter getAdapter();
protected abstract int getEmptyText();
protected final void handleServiceCallback(int i, ServiceResult serviceresult)
{
if(mPendingRequestId != null && i == mPendingRequestId.intValue()) {
DialogFragment dialogfragment = (DialogFragment)getFragmentManager().findFragmentByTag("req_pending");
if(dialogfragment != null)
dialogfragment.dismiss();
mPendingRequestId = null;
if(serviceresult != null && serviceresult.hasError())
Toast.makeText(getActivity(), R.string.transient_server_error, 0).show();
}
}
protected abstract View inflateView(LayoutInflater layoutinflater, ViewGroup viewgroup);
protected abstract boolean isError();
protected abstract boolean isLoaded();
public final void onActivityResult(int i, int j, Intent intent)
{
if(j == -1 && i == 0)
{
final String personId = intent.getStringExtra("person_id");
final String personName = intent.getStringExtra("display_name");
final ArrayList selectedCircleIds = intent.getStringArrayListExtra("selected_circle_ids");
mHandler.post(new Runnable() {
public final void run()
{
addCircleMembership(personId, personName, selectedCircleIds);
}
});
}
super.onActivityResult(i, j, intent);
}
public void onAttach(Activity activity)
{
super.onAttach(activity);
mAvatarCache = ImageCache.getInstance(activity);
mCircleNameResolver = new CircleNameResolver(activity, getLoaderManager(), getAccount());
mCircleNameResolver.registerObserver(mCircleContentObserver);
}
public void onCreate(Bundle bundle)
{
if(bundle != null && bundle.containsKey("request_id"))
mPendingRequestId = Integer.valueOf(bundle.getInt("request_id"));
super.onCreate(bundle);
mCircleNameResolver.initLoader();
onInitLoaders(bundle);
}
public View onCreateView(LayoutInflater layoutinflater, ViewGroup viewgroup, Bundle bundle)
{
View view = inflateView(layoutinflater, viewgroup);
mListView = (ListView)view.findViewById(0x102000a);
mListView.setAdapter(getAdapter());
mListView.setOnScrollListener(this);
mListView.setOnItemClickListener(this);
mListView.setRecyclerListener(this);
return view;
}
protected abstract void onInitLoaders(Bundle bundle);
public void onMovedToScrapHeap(View view)
{
if(view instanceof Recyclable)
((Recyclable)view).onRecycle();
}
public final void onPause()
{
super.onPause();
EsService.unregisterListener(mServiceListener);
}
public final void onResume()
{
super.onResume();
EsService.registerListener(mServiceListener);
if(mPendingRequestId != null && !EsService.isRequestPending(mPendingRequestId.intValue()))
{
ServiceResult serviceresult = EsService.removeResult(mPendingRequestId.intValue());
handleServiceCallback(mPendingRequestId.intValue(), serviceresult);
mPendingRequestId = null;
}
updateView(getView());
}
public void onSaveInstanceState(Bundle bundle)
{
super.onSaveInstanceState(bundle);
if(mPendingRequestId != null)
bundle.putInt("request_id", mPendingRequestId.intValue());
}
public void onScroll(AbsListView abslistview, int i, int j, int k)
{
}
public void onScrollStateChanged(AbsListView abslistview, int i)
{
if(i == 2)
mAvatarCache.pause();
else
mAvatarCache.resume();
}
protected final void showCircleMembershipDialog(String s, String s1)
{
startActivityForResult(Intents.getCircleMembershipActivityIntent(getActivity(), getAccount(), s, s1, false), 0);
}
protected void updateView(View view)
{
boolean flag;
if(!isLoaded() || !mCircleNameResolver.isLoaded())
flag = true;
else
flag = false;
if(!flag) {
if(!isError()) {
view.findViewById(R.id.server_error).setVisibility(8);
if(!isEmpty()) {
showContent(view);
return;
} else {
((TextView)view.findViewById(R.id.list_empty_text)).setText(getEmptyText());
showEmptyView(view);
return;
}
} else {
view.findViewById(R.id.server_error).setVisibility(0);
showContent(view);
return;
}
} else {
showEmptyViewProgress(view);
return;
}
}
}