/**
* galaxy inc.
* meetup client for android
*/
package com.galaxy.meetup.client.android.ui.fragments;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.database.Cursor;
import android.database.DataSetObserver;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Checkable;
import android.widget.ListView;
import android.widget.SectionIndexer;
import com.galaxy.meetup.client.android.R;
import com.galaxy.meetup.client.android.common.EsCompositeCursorAdapter;
import com.galaxy.meetup.client.android.content.AudienceData;
import com.galaxy.meetup.client.android.content.CircleData;
import com.galaxy.meetup.client.android.content.EsAccount;
import com.galaxy.meetup.client.android.content.EsAccountsData;
import com.galaxy.meetup.client.android.content.PersonData;
import com.galaxy.meetup.client.android.service.ImageCache;
import com.galaxy.meetup.client.android.ui.view.AudienceView;
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.android.ui.view.PeopleListItemView;
import com.galaxy.meetup.client.android.ui.view.SectionHeaderView;
import com.galaxy.meetup.client.util.AccountsUtil;
import com.galaxy.meetup.client.util.StringUtils;
/**
*
* @author sihai
*
*/
public class EditAudienceFragment extends EsFragment implements
LoaderCallbacks, OnScrollListener, OnItemClickListener,
OnItemCheckedChangeListener {
private EditAudienceAdapter mAdapter;
private Runnable mAudienceChangedCallback;
private boolean mAudienceSet;
private AudienceView mAudienceView;
private ImageCache mAvatarCache;
private final DataSetObserver mCircleContentObserver = new DataSetObserver() {
public final void onChanged()
{
updateView(getView());
}
};
private CircleNameResolver mCircleNameResolver;
private boolean mCircleSelectionEnabled;
private int mCircleUsageType;
private boolean mFilterNullGaiaIds;
private boolean mIncludePlusPages;
private boolean mIncomingAudienceIsReadOnly;
private ListView mListView;
private OnAudienceChangeListener mListener;
private boolean mLoaderError;
private boolean mLoadersInitialized;
private final Map mSelectedCircles = new HashMap();
private final Map mSelectedPeople = new HashMap();
public EditAudienceFragment()
{
mAudienceChangedCallback = new Runnable() {
public final void run()
{
AudienceData audiencedata;
AudienceData audiencedata1;
int i;
int j;
int k;
int l;
boolean flag;
audiencedata = getAudience();
audiencedata1 = getAudienceFromList();
i = audiencedata.getCircleCount();
j = audiencedata1.getCircleCount();
k = audiencedata.getUserCount();
l = audiencedata1.getUserCount();
flag = false;
if(i != j) {
flag = false;
if(k != l) {
if(!flag)
{
setAudience(getAudience());
mAdapter.notifyDataSetChanged();
}
return;
}
ArrayList arraylist = new ArrayList();
CircleData acircledata[] = audiencedata1.getCircles();
int i1 = acircledata.length;
for(int j1 = 0; j1 < i1; j1++)
arraylist.add(acircledata[j1].getId());
CircleData acircledata1[] = audiencedata.getCircles();
int k1 = acircledata1.length;
for(int l1 = 0; l1 < k1; l1++)
{
boolean flag2 = arraylist.contains(acircledata1[l1].getId());
flag = false;
if(!flag2) {
if(!flag)
{
setAudience(getAudience());
mAdapter.notifyDataSetChanged();
}
return;
}
}
ArrayList arraylist1 = new ArrayList();
PersonData apersondata[] = audiencedata1.getUsers();
int i2 = apersondata.length;
for(int j2 = 0; j2 < i2; j2++)
arraylist1.add(apersondata[j2].getObfuscatedId());
PersonData apersondata1[] = audiencedata.getUsers();
int k2 = apersondata1.length;
for(int l2 = 0; l2 < k2; l2++)
{
boolean flag1 = arraylist1.contains(apersondata1[l2].getObfuscatedId());
flag = false;
if(!flag1) {
if(!flag)
{
setAudience(getAudience());
mAdapter.notifyDataSetChanged();
}
return;
}
}
flag = true;
}
if(!flag)
{
setAudience(getAudience());
mAdapter.notifyDataSetChanged();
}
}
};
}
private void addToSelectedCircles(CircleListItemView circlelistitemview)
{
String s = circlelistitemview.getCircleId();
CircleData circledata = new CircleData(s, circlelistitemview.getCircleType(), circlelistitemview.getCircleName(), circlelistitemview.getMemberCount());
mSelectedCircles.put(s, circledata);
}
private EsAccount getAccount()
{
return (EsAccount)getActivity().getIntent().getExtras().get("account");
}
private AudienceData getAudienceFromList()
{
ArrayList arraylist = new ArrayList(mSelectedCircles.size());
for(Iterator iterator = mSelectedCircles.values().iterator(); iterator.hasNext(); arraylist.add((CircleData)iterator.next()));
ArrayList arraylist1 = new ArrayList(mSelectedPeople.size());
for(Iterator iterator1 = mSelectedPeople.values().iterator(); iterator1.hasNext(); arraylist1.add((PersonData)iterator1.next()));
return new AudienceData(arraylist1, arraylist);
}
private boolean isLoading() {
{
if(mAdapter != null && (!mCircleSelectionEnabled || mAdapter.getCursor(1) != null) && mAdapter.getCursor(2) != null && mAdapter.getCursor(0) != null)
{
boolean flag1 = mCircleNameResolver.isLoaded();
if(flag1)
return false;
}
}
return true;
}
private void updateSelectionCount() {
// TODO
}
public final void addSelectedCircle(String s, CircleData circledata) {
mSelectedCircles.put(s, circledata);
updateSelectionCount();
}
public final void addSelectedPerson(String s, PersonData persondata) {
mSelectedPeople.put(s, persondata);
if(mLoadersInitialized)
getLoaderManager().restartLoader(0, null, this);
updateSelectionCount();
}
public final AudienceData getAudience()
{
return mAudienceView.getAudience();
}
public final boolean hasAudience()
{
return mAudienceSet;
}
protected final boolean isEmpty() {
if(!isLoading())
{
boolean flag1 = mAdapter.isPartitionEmpty(1);
if(!flag1)
return false;
boolean flag2 = mAdapter.isPartitionEmpty(2);
if(!flag2)
return false;
boolean flag3 = mAdapter.isPartitionEmpty(0);
if(!flag3)
return false;
}
return true;
}
public final boolean isSelectionValid()
{
boolean flag;
if(!mSelectedPeople.isEmpty() || !mSelectedCircles.isEmpty())
flag = true;
else
flag = false;
return flag;
}
public final void onAttach(Activity activity)
{
super.onAttach(activity);
mAdapter = new EditAudienceAdapter(activity);
mAdapter.addPartition(false, true);
mAdapter.addPartition(false, true);
mAdapter.addPartition(false, false);
mAvatarCache = ImageCache.getInstance(activity);
mCircleNameResolver = new CircleNameResolver(activity, getLoaderManager(), getAccount());
mCircleNameResolver.registerObserver(mCircleContentObserver);
}
public final void onCreate(Bundle bundle)
{
super.onCreate(bundle);
if(bundle != null)
setAudience((AudienceData)bundle.getParcelable("audience"));
getLoaderManager().initLoader(0, null, this);
if(mCircleSelectionEnabled)
getLoaderManager().initLoader(1, null, this);
getLoaderManager().initLoader(2, null, this);
mCircleNameResolver.initLoader();
mLoadersInitialized = true;
}
public final Loader onCreateLoader(int i, Bundle bundle) {
Loader loader = null;
if(0 == i) {
loader = new PeopleNotInCirclesLoader(getActivity(), getAccount(), new String[] {
"_id", "name", "person_id", "gaia_id"
}, mSelectedPeople, mFilterNullGaiaIds);
} else if(1 == i) {
loader = new CircleListLoader(getActivity(), getAccount(), mCircleUsageType, new String[] {
"_id", "circle_name", "circle_id", "type", "contact_count"
});
} else if(2 == i) {
loader = new PeopleListLoader(getActivity(), getAccount(), new String[] {
"_id", "name", "person_id", "gaia_id", "packed_circle_ids"
}, null, mIncludePlusPages, mFilterNullGaiaIds);
}
return loader;
}
public final View onCreateView(LayoutInflater layoutinflater, ViewGroup viewgroup, Bundle bundle)
{
View view = layoutinflater.inflate(R.layout.edit_audience_fragment, viewgroup, false);
mAudienceView = new AudienceView(getActivity(), null, 0, true);
mAudienceView.setAccount(getAccount());
mAudienceView.setAudienceChangedCallback(mAudienceChangedCallback);
mAudienceView.findViewById(R.id.audience_to_text).setVisibility(8);
mAudienceView.findViewById(R.id.edit_audience).setVisibility(8);
mListView = (ListView)view.findViewById(0x102000a);
mListView.addHeaderView(mAudienceView);
mListView.setAdapter(mAdapter);
mListView.setOnItemClickListener(this);
mListView.setOnScrollListener(this);
return view;
}
public final void onItemCheckedChanged(final CheckableListItemView view, boolean flag)
{
if((view instanceof CircleListItemView)) {
final CircleListItemView item = (CircleListItemView)view;
String s4 = item.getCircleId();
if(flag)
{
final FragmentActivity activity = getActivity();
final EsAccount account = getAccount();
if(AccountsUtil.isRestrictedCircleForAccount(account, item.getCircleType()) && !EsAccountsData.hasSeenMinorPublicExtendedDialog(activity, account))
{
android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(getActivity());
builder.setTitle(item.getCircleName());
builder.setMessage(R.string.dialog_public_or_extended_circle_for_minor);
builder.setPositiveButton(R.string.ok, new android.content.DialogInterface.OnClickListener() {
public final void onClick(DialogInterface dialoginterface, int i)
{
addToSelectedCircles(item);
EsAccountsData.saveMinorPublicExtendedDialogSeenPreference(activity, account, true);
}
});
builder.setNegativeButton(R.string.cancel, new android.content.DialogInterface.OnClickListener() {
public final void onClick(DialogInterface dialoginterface, int i)
{
view.setChecked(false);
}
});
builder.show();
} else
{
addToSelectedCircles(item);
}
} else
{
mSelectedCircles.remove(s4);
}
} else if(view instanceof PeopleListItemView) {
PeopleListItemView peoplelistitemview = (PeopleListItemView)view;
String s = peoplelistitemview.getPersonId();
if(!flag) {
mSelectedPeople.remove(s);
} else {
String s2 = null;
String s1 = peoplelistitemview.getGaiaId();
if(!s.startsWith("e:")) {
boolean flag1 = s.startsWith("p:");
if(flag1)
s2 = s;
} else {
s2 = s.substring(2);
}
String s3 = peoplelistitemview.getContactName();
mSelectedPeople.put(s, new PersonData(s1, s3, s2));
}
}
updateSelectionCount();
}
public void onItemClick(AdapterView adapterview, View view, int i, long l)
{
if(view instanceof Checkable)
((Checkable)view).toggle();
}
public final void onLoadFinished(Loader loader, Object obj) {
Cursor cursor = (Cursor)obj;
boolean flag;
if(cursor == null)
flag = true;
else
flag = false;
mLoaderError = flag;
int id = loader.getId();
if(0 == id) {
mAdapter.changeCursor(0, cursor);
updateView(getView());
} else if(1 == id) {
mAdapter.changeCursor(1, cursor);
updateView(getView());
} else if(2 == id) {
mAdapter.changeCursor(2, cursor);
updateView(getView());
}
}
public final void onLoaderReset(Loader loader)
{
}
public final void onResume()
{
super.onResume();
updateView(getView());
}
public final void onSaveInstanceState(Bundle bundle)
{
super.onSaveInstanceState(bundle);
bundle.putParcelable("audience", getAudienceFromList());
}
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();
}
public final void setAudience(AudienceData audiencedata)
{
mAudienceSet = true;
mSelectedPeople.clear();
mSelectedCircles.clear();
if(audiencedata != null)
{
CircleData acircledata[] = audiencedata.getCircles();
int i = acircledata.length;
for(int j = 0; j < i; j++)
{
CircleData circledata = acircledata[j];
mSelectedCircles.put(circledata.getId(), circledata);
}
PersonData apersondata[] = audiencedata.getUsers();
int k = apersondata.length;
int l = 0;
while(l < k)
{
PersonData persondata = apersondata[l];
String s = persondata.getObfuscatedId();
String s1;
if(!TextUtils.isEmpty(s))
{
s1 = (new StringBuilder("g:")).append(s).toString();
} else
{
boolean flag = TextUtils.isEmpty(persondata.getEmail());
s1 = null;
if(!flag)
{
String s2 = persondata.getEmail();
if(s2.startsWith("p:"))
s1 = s2;
else
s1 = (new StringBuilder("e:")).append(s2).toString();
}
}
if(s1 != null)
mSelectedPeople.put(s1, persondata);
l++;
}
}
updateSelectionCount();
}
public final void setCircleSelectionEnabled(boolean flag)
{
mCircleSelectionEnabled = true;
}
public final void setCircleUsageType(int i)
{
mCircleUsageType = i;
}
public final void setFilterNullGaiaIds(boolean flag)
{
mFilterNullGaiaIds = flag;
}
public final void setIncludePlusPages(boolean flag)
{
mIncludePlusPages = flag;
}
public final void setIncomingAudienceIsReadOnly(boolean flag)
{
mIncomingAudienceIsReadOnly = flag;
}
public final void setOnSelectionChangeListener(OnAudienceChangeListener onaudiencechangelistener)
{
mListener = onaudiencechangelistener;
}
protected final void updateView(View view)
{
View view1 = view.findViewById(0x102000a);
View view2 = view.findViewById(R.id.server_error);
if(mLoaderError)
{
view1.setVisibility(8);
view2.setVisibility(0);
showContent(view);
} else
if(isLoading())
{
view1.setVisibility(8);
view2.setVisibility(8);
showEmptyViewProgress(view);
} else
if(isEmpty())
{
view1.setVisibility(8);
view2.setVisibility(8);
setupEmptyView(view, R.string.no_people_in_circles);
showEmptyView(view);
} else
{
view1.setVisibility(0);
view2.setVisibility(8);
showContent(view);
}
updateSelectionCount();
}
private final class EditAudienceAdapter extends EsCompositeCursorAdapter implements SectionIndexer {
private EsAlphabetIndexer mIndexer;
public EditAudienceAdapter(Context context)
{
super(context);
}
protected final void bindView(View view, int i, Cursor cursor, int j) {
if(0 == i) {
PeopleListItemView peoplelistitemview1 = (PeopleListItemView)view;
peoplelistitemview1.setCircleNameResolver(mCircleNameResolver);
String s3 = cursor.getString(2);
peoplelistitemview1.setPersonId(s3);
String s4 = cursor.getString(3);
if(!TextUtils.isEmpty(s4))
peoplelistitemview1.setGaiaId(s4);
peoplelistitemview1.setContactName(cursor.getString(1));
boolean flag2 = mSelectedPeople.containsKey(s3);
peoplelistitemview1.setChecked(flag2);
peoplelistitemview1.updateContentDescription();
boolean flag3;
if(!flag2 || !mIncomingAudienceIsReadOnly)
flag3 = true;
else
flag3 = false;
peoplelistitemview1.setEnabled(flag3);
} else if(1 == i) {
CircleListItemView circlelistitemview = (CircleListItemView)view;
String s = cursor.getString(2);
int k = cursor.getInt(3);
circlelistitemview.setCircle(s, k, cursor.getString(1), cursor.getInt(4), AccountsUtil.isRestrictedCircleForAccount(getAccount(), k));
circlelistitemview.setChecked(mSelectedCircles.containsKey(s));
circlelistitemview.updateContentDescription();
} else if(2 == i) {
PeopleListItemView peoplelistitemview = (PeopleListItemView)view;
peoplelistitemview.setCircleNameResolver(mCircleNameResolver);
String s1 = cursor.getString(2);
peoplelistitemview.setPersonId(s1);
peoplelistitemview.setGaiaId(cursor.getString(3));
String s2 = cursor.getString(1);
peoplelistitemview.setContactName(s2);
peoplelistitemview.setPackedCircleIds(cursor.getString(4));
boolean flag = mSelectedPeople.containsKey(s1);
peoplelistitemview.setChecked(flag);
boolean flag1;
char c;
if(!flag || !mIncomingAudienceIsReadOnly)
flag1 = true;
else
flag1 = false;
peoplelistitemview.setEnabled(flag1);
c = StringUtils.firstLetter(s2);
if(!cursor.moveToPrevious())
peoplelistitemview.setSectionHeader(c);
else
if(StringUtils.firstLetter(cursor.getString(1)) != c)
peoplelistitemview.setSectionHeader(c);
else
peoplelistitemview.setSectionHeaderVisible(false);
peoplelistitemview.updateContentDescription();
}
}
public final void changeCursor(int i, Cursor cursor)
{
if(i == 2 && cursor != null)
mIndexer = new EsAlphabetIndexer(cursor, 1);
super.changeCursor(i, cursor);
}
protected final int getItemViewType(int i, int j)
{
return i;
}
public final int getItemViewTypeCount()
{
return 3;
}
public final int getPositionForSection(int i)
{
int j;
if(i == 0 || mIndexer == null)
j = 0;
else
j = getPositionForPartition(2) + mIndexer.getPositionForSection(i - 1);
return j;
}
public final int getSectionForPosition(int i) {
int j = 0;
EsAlphabetIndexer esalphabetindexer = mIndexer;
if(null == esalphabetindexer) {
return j;
}
int k = getPositionForPartition(2);
j = 0;
if(i >= k)
j = 1 + mIndexer.getSectionForPosition(i - k);
return j;
}
public final Object[] getSections()
{
Object aobj1[];
if(mIndexer == null)
{
aobj1 = null;
} else
{
Object aobj[] = mIndexer.getSections();
aobj1 = new Object[1 + aobj.length];
aobj1[0] = "?";
System.arraycopy(((Object) (aobj)), 0, ((Object) (aobj1)), 1, aobj.length);
}
return aobj1;
}
@Override
protected final View newHeaderView(Context context, int partion, Cursor curosr, ViewGroup viewgroup) {
SectionHeaderView sectionheaderview = (SectionHeaderView)LayoutInflater.from(context).inflate(R.layout.section_header, viewgroup, false);
if(0 == partion) {
sectionheaderview.setText(R.string.edit_audience_header_added);
} else if(1 == partion) {
sectionheaderview.setText(R.string.edit_audience_header_circles);
}
return sectionheaderview;
}
protected final View newView(Context context, int partion, Cursor cursor, int position, ViewGroup parent) {
View view = null;
if(0 == partion || 2 == partion) {
view = PeopleListItemView.createInstance(context);
((PeopleListItemView) (view)).setOnItemCheckedChangeListener(EditAudienceFragment.this);
((PeopleListItemView) (view)).setCheckBoxVisible(true);
((PeopleListItemView) (view)).setCircleNameResolver(mCircleNameResolver);
} else if(1 == partion) {
view = new CircleListItemView(context);
((CircleListItemView) (view)).setOnItemCheckedChangeListener(EditAudienceFragment.this);
((CircleListItemView) (view)).setCheckBoxVisible(true);
((CircleListItemView) (view)).updateContentDescription();
}
return view;
}
}
public static interface OnAudienceChangeListener
{
public abstract void onAudienceChanged(String s);
}
}