/** * 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.Context; import android.database.Cursor; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.Loader; import android.support.v4.widget.CursorAdapter; import android.text.TextUtils; import android.view.ContextThemeWrapper; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; 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.R; import com.galaxy.meetup.client.android.content.EsAccount; 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.fragments.AlertFragmentDialog.AlertDialogListener; import com.galaxy.meetup.client.android.ui.fragments.CirclePropertiesFragmentDialog.CirclePropertiesListener; import com.galaxy.meetup.client.android.ui.view.CheckableListItemView; import com.galaxy.meetup.client.android.ui.view.CheckableListItemView.OnItemCheckedChangeListener; import com.galaxy.meetup.client.android.ui.view.CircleListItemView; import com.galaxy.meetup.client.util.AccountsUtil; /** * * @author sihai * */ public class CirclesMultipleSelectFragment extends Fragment implements LoaderCallbacks, OnItemClickListener, AlertDialogListener, CirclePropertiesListener, OnItemCheckedChangeListener { private CirclesCursorAdapter mAdapter; private ArrayList mCircleIdSnapshot; private int mCircleUsageType; private boolean mContactLoaded; private ListView mListView; private OnCircleSelectionListener mListener; private boolean mNewCircleEnabled; private ArrayList mNewCircleIds; private ArrayList mOldCircleIds; private Integer mPendingRequestId; private String mPersonId; private final EsServiceListener mServiceListener = new EsServiceListener() { public final void onCreateCircleRequestComplete(int i, ServiceResult serviceresult) { handleServiceCallback(i, serviceresult); } }; private ContextThemeWrapper mThemeContext; public CirclesMultipleSelectFragment() { } private EsAccount getAccount() { return (EsAccount)getActivity().getIntent().getExtras().get("account"); } private void parsePackedCircleIds(String s) { mOldCircleIds = new ArrayList(); if(!TextUtils.isEmpty(s)) { int j; for(int i = 0; i < s.length(); i = j + 1) { j = s.indexOf('|', i); if(j == -1) j = s.length(); mOldCircleIds.add(s.substring(i, j)); } } if(mNewCircleIds == null) mNewCircleIds = new ArrayList(mOldCircleIds); if(mListener != null) mListener.onCircleSelectionChange(); } public final ArrayList getOriginalCircleIds() { return mOldCircleIds; } public final ArrayList getSelectedCircleIds() { return mNewCircleIds; } protected final void handleServiceCallback(int i, ServiceResult serviceresult) { if(mPendingRequestId != null && mPendingRequestId.intValue() == i) { mPendingRequestId = null; DialogFragment dialogfragment = (DialogFragment)getFragmentManager().findFragmentByTag("req_pending"); if(dialogfragment != null) dialogfragment.dismiss(); if(serviceresult.hasError()) Toast.makeText(getActivity(), R.string.transient_server_error, 0).show(); } } public final void onAttach(Activity activity) { super.onAttach(activity); mThemeContext = new ContextThemeWrapper(activity, R.style.CircleSelectorList); mAdapter = new CirclesCursorAdapter(mThemeContext); } public final void onCirclePropertiesChange(String s, String s1, boolean flag) { if(TextUtils.isEmpty(s1)) { return; } String s2; Cursor cursor1; boolean flag1; s2 = s1.trim(); // TODO } public final void onCreate(Bundle bundle) { super.onCreate(bundle); if(bundle != null) { mNewCircleIds = bundle.getStringArrayList("new_circles"); mCircleIdSnapshot = bundle.getStringArrayList("existing_circle_ids"); if(bundle.containsKey("request_id")) mPendingRequestId = Integer.valueOf(bundle.getInt("request_id")); } if(mCircleUsageType == 2 && mPersonId != null) getLoaderManager().initLoader(0, null, this); getLoaderManager().initLoader(1, null, this); } public final Loader onCreateLoader(int i, Bundle bundle) { Loader loader = null; if(0 == i) { FragmentActivity fragmentactivity = getActivity(); android.net.Uri uri = EsProvider.appendAccountParameter(EsProvider.CONTACTS_URI, getAccount()); String as[] = { "name", "packed_circle_ids" }; String as1[] = new String[1]; as1[0] = mPersonId; loader = new EsCursorLoader(fragmentactivity, uri, as, "person_id=?", as1, null); } else if(1 == i) { loader = new CircleListLoader(getActivity(), getAccount(), mCircleUsageType, new String[] { "_id", "circle_id", "circle_name", "contact_count", "type" }); } return loader; } public final View onCreateView(LayoutInflater layoutinflater, ViewGroup viewgroup, Bundle bundle) { LayoutInflater layoutinflater1 = LayoutInflater.from(mThemeContext); View view = layoutinflater1.inflate(R.layout.circles_multiple_select_fragment, null, false); mListView = (ListView)view.findViewById(0x102000a); if(mNewCircleEnabled) { View view1 = layoutinflater1.inflate(R.layout.circles_item_new_circle, viewgroup, false); view1.setContentDescription(getString(R.string.create_new_circle)); mListView.addHeaderView(view1); } mListView.setAdapter(mAdapter); mListView.setOnItemClickListener(this); return view; } public final void onDialogCanceled(String s) { } public final void onDialogListClick(int i, Bundle bundle) { } public final void onDialogNegativeClick(String s) { } public final void onDialogPositiveClick(Bundle bundle, String s) { } public final void onItemCheckedChanged(CheckableListItemView checkablelistitemview, boolean flag) { String s = ((CircleListItemView)checkablelistitemview).getCircleId(); if(flag) { if(!mNewCircleIds.contains(s)) mNewCircleIds.add(s); } else { mNewCircleIds.remove(s); } if(mListener != null) mListener.onCircleSelectionChange(); } public void onItemClick(AdapterView adapterview, View view, int i, long l) { if(mNewCircleEnabled && i == 0) { getActivity(); CirclePropertiesFragmentDialog circlepropertiesfragmentdialog = CirclePropertiesFragmentDialog.newInstance$47e87423(); circlepropertiesfragmentdialog.setTargetFragment(this, 0); circlepropertiesfragmentdialog.show(getFragmentManager(), "new_circle_input"); } else { ((CircleListItemView)view).toggle(); } } public final void onLoadFinished(Loader loader, Object obj) { boolean flag = true; Cursor cursor = (Cursor)obj; if(null == cursor) { Toast.makeText(getActivity(), R.string.transient_server_error, 0).show(); return; } // TODO int id = loader.getId(); if(0 == id) { } else if(1 == id) { } else { } } public final void onLoaderReset(Loader loader) { } 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; } } public final void onSaveInstanceState(Bundle bundle) { super.onSaveInstanceState(bundle); bundle.putStringArrayList("new_circles", mNewCircleIds); bundle.putStringArrayList("existing_circle_ids", mCircleIdSnapshot); if(mPendingRequestId != null) bundle.putInt("request_id", mPendingRequestId.intValue()); } public final void setCircleUsageType(int i) { mCircleUsageType = 2; } public final void setNewCircleEnabled(boolean flag) { mNewCircleEnabled = true; } public final void setOnCircleSelectionListener(OnCircleSelectionListener oncircleselectionlistener) { mListener = oncircleselectionlistener; } public final void setPersonId(String s) { mPersonId = s; } //================================================================================================================== // Inner class //================================================================================================================== private final class CirclesCursorAdapter extends CursorAdapter { public final void bindView(View view, Context context, Cursor cursor) { CircleListItemView circlelistitemview = (CircleListItemView)view; String s = cursor.getString(1); int i = cursor.getInt(4); circlelistitemview.setCircle(s, i, cursor.getString(2), cursor.getInt(3), AccountsUtil.isRestrictedCircleForAccount(getAccount(), i)); circlelistitemview.setChecked(mNewCircleIds.contains(s)); circlelistitemview.updateContentDescription(); } public final View newView(Context context, Cursor cursor, ViewGroup viewgroup) { CircleListItemView circlelistitemview = new CircleListItemView(context); circlelistitemview.setAvatarStripVisible(false); circlelistitemview.setCheckBoxVisible(true); circlelistitemview.setOnItemCheckedChangeListener(CirclesMultipleSelectFragment.this); return circlelistitemview; } public CirclesCursorAdapter(Context context) { super(context, null, 0); } } public static interface OnCircleSelectionListener { public abstract void onCircleSelectionChange(); } }