/**
* galaxy inc.
* meetup client for android
*/
package com.galaxy.meetup.client.android.ui.view;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import android.content.Context;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import android.support.v4.app.LoaderManager;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.TextView;
import com.galaxy.meetup.client.android.R;
import com.galaxy.meetup.client.android.analytics.EsAnalytics;
import com.galaxy.meetup.client.android.analytics.OzActions;
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.EsAccount;
import com.galaxy.meetup.client.android.content.EsPeopleData;
import com.galaxy.meetup.client.android.content.PersonData;
import com.galaxy.meetup.client.android.content.SquareTargetData;
import com.galaxy.meetup.client.android.ui.fragments.CircleListLoader;
import com.galaxy.meetup.client.util.EsLog;
import com.galaxy.meetup.client.util.PeopleUtils;
/**
*
* @author sihai
*
*/
public class AudienceView extends FrameLayout implements LoaderCallbacks,
OnClickListener {
static final boolean $assertionsDisabled;
protected EsAccount mAccount;
protected Runnable mAudienceChangedCallback;
protected final boolean mCanRemoveChips;
protected ViewGroup mChipContainer;
protected final ArrayList mChips;
protected boolean mEdited;
static
{
boolean flag;
if(!AudienceView.class.desiredAssertionStatus())
flag = true;
else
flag = false;
$assertionsDisabled = flag;
}
public AudienceView(Context context)
{
this(context, null);
}
public AudienceView(Context context, AttributeSet attributeset)
{
this(context, attributeset, 0);
}
public AudienceView(Context context, AttributeSet attributeset, int i)
{
this(context, attributeset, i, false);
}
public AudienceView(Context context, AttributeSet attributeset, int i, boolean flag)
{
super(context, attributeset, i);
mChips = new ArrayList();
init();
mCanRemoveChips = flag;
}
private int getCloseIcon()
{
int i;
if(mCanRemoveChips)
i = R.drawable.ic_acl_x;
else
i = 0;
return i;
}
private void setAudience(AudienceData audiencedata) {
List arraylist = new ArrayList(mChips);
AudienceData audiencedata1 = getAudience();
CircleData acircledata[] = audiencedata1.getCircles();
PersonData apersondata[] = audiencedata1.getUsers();
SquareTargetData asquaretargetdata[] = audiencedata1.getSquareTargets();
mChips.clear();
if(audiencedata != null)
{
int i = 0;
for(int j = arraylist.size(); i < j; i++)
{
AudienceData audiencedata5 = (AudienceData)arraylist.get(i);
if(PeopleUtils.in(audiencedata, audiencedata5))
mChips.add(audiencedata5);
}
CircleData acircledata1[] = audiencedata.getCircles();
int k = acircledata1.length;
for(int l = 0; l < k; l++)
{
CircleData circledata = acircledata1[l];
if(PeopleUtils.in(acircledata, circledata))
continue;
List arraylist3 = mChips;
AudienceData audiencedata4 = new AudienceData(circledata);
arraylist3.add(audiencedata4);
if(circledata == null && EsLog.isLoggable("AudienceView", 4))
Log.i("AudienceView", (new StringBuilder("Added a null circle: ")).append(Thread.currentThread().getStackTrace()).toString());
}
PersonData apersondata1[] = audiencedata.getUsers();
int i1 = apersondata1.length;
for(int j1 = 0; j1 < i1; j1++)
{
PersonData persondata = apersondata1[j1];
if(!PeopleUtils.in(apersondata, persondata))
{
ArrayList arraylist2 = mChips;
AudienceData audiencedata3 = new AudienceData(persondata);
arraylist2.add(audiencedata3);
}
}
SquareTargetData asquaretargetdata1[] = audiencedata.getSquareTargets();
int k1 = asquaretargetdata1.length;
for(int l1 = 0; l1 < k1; l1++)
{
SquareTargetData squaretargetdata = asquaretargetdata1[l1];
if(!PeopleUtils.in(asquaretargetdata, squaretargetdata))
{
List arraylist1 = mChips;
AudienceData audiencedata2 = new AudienceData(squaretargetdata);
arraylist1.add(audiencedata2);
}
}
}
update();
}
protected void addChip(int i) {
View view = inflate(R.layout.people_audience_view_chip);
if(mCanRemoveChips)
view.setOnClickListener(this);
mChipContainer.addView(view, i);
}
public final void addCircle(CircleData circledata) {
mEdited = true;
if(!PeopleUtils.in(getAudience().getCircles(), circledata))
{
Context context = getContext();
OzViews ozviews = OzViews.getViewForLogging(context);
EsAnalytics.recordActionEvent(context, mAccount, OzActions.PLATFORM_AUDIENCE_VIEW_CIRCLE_ADDED, ozviews);
mChips.add(new AudienceData(circledata));
if(circledata == null && EsLog.isLoggable("AudienceView", 4))
Log.i("AudienceView", (new StringBuilder("Added a null circle: ")).append(Thread.currentThread().getStackTrace()).toString());
update();
}
}
public final void addPerson(PersonData persondata) {
mEdited = true;
if(!PeopleUtils.in(getAudience().getUsers(), persondata))
{
Context context = getContext();
OzViews ozviews = OzViews.getViewForLogging(context);
EsAnalytics.recordActionEvent(context, mAccount, OzActions.PLATFORM_AUDIENCE_VIEW_PERSON_ADDED, ozviews);
mChips.add(new AudienceData(persondata));
update();
}
}
public final AudienceData getAudience() {
List arraylist = mChips;
List arraylist1 = new ArrayList();
List arraylist2 = new ArrayList();
List arraylist3 = new ArrayList();
for(Iterator iterator = arraylist.iterator(); iterator.hasNext();)
{
AudienceData audiencedata = (AudienceData)iterator.next();
PersonData apersondata[] = audiencedata.getUsers();
int i = apersondata.length;
for(int j = 0; j < i; j++)
arraylist1.add(apersondata[j]);
CircleData acircledata[] = audiencedata.getCircles();
int k = acircledata.length;
for(int l = 0; l < k; l++)
arraylist2.add(acircledata[l]);
SquareTargetData asquaretargetdata[] = audiencedata.getSquareTargets();
int i1 = asquaretargetdata.length;
int j1 = 0;
while(j1 < i1)
{
arraylist3.add(asquaretargetdata[j1]);
j1++;
}
}
return new AudienceData(arraylist1, arraylist2, arraylist3);
}
protected int getChipCount()
{
return mChipContainer.getChildCount();
}
protected final View inflate(int i)
{
return LayoutInflater.from(getContext()).inflate(i, this, false);
}
protected void init()
{
addView(inflate(R.layout.audience_view));
mChipContainer = (ViewGroup)findViewById(R.id.people_audience_view_chip_container);
}
public final void initLoaders(LoaderManager loadermanager)
{
loadermanager.initLoader(R.id.audience_circle_name_loader_id, null, this);
}
public final boolean isEdited()
{
return mEdited;
}
public void onClick(View view) {
if(!mCanRemoveChips) {
return;
}
Context context = getContext();
OzViews ozviews = OzViews.getViewForLogging(context);
EsAnalytics.recordActionEvent(context, mAccount, OzActions.PLATFORM_AUDIENCE_VIEW_CLICKED, ozviews);
int i = mChipContainer.indexOfChild(view);
if (i != -1) {
mEdited = true;
mChips.remove(i);
update();
}
}
public final Loader onCreateLoader(int i, Bundle bundle)
{
if(i == R.id.audience_circle_name_loader_id)
return new CircleListLoader(getContext(), mAccount, 5, CirclesQuery.PROJECTION);
else
throw new AssertionError();
}
public final void onLoadFinished(Loader loader, Object obj) {
int i;
Cursor cursor;
i = 0;
cursor = (Cursor)obj;
if(loader.getId() != R.id.audience_circle_name_loader_id)
throw new AssertionError();
else {
if(cursor == null)
return;
int j;
List arraylist;
int k;
if(!$assertionsDisabled && !Arrays.equals(CirclesQuery.PROJECTION, cursor.getColumnNames()))
throw new AssertionError();
j = mChips.size();
arraylist = new ArrayList(j);
k = 0;
// TODO
}
}
public final void onLoaderReset(Loader loader)
{
}
protected void onRestoreInstanceState(Parcelable parcelable)
{
SavedState savedstate = (SavedState)parcelable;
super.onRestoreInstanceState(savedstate.getSuperState());
mChips.clear();
mChips.addAll(savedstate.audience);
if(EsLog.isLoggable("AudienceView", 4))
{
Iterator iterator = savedstate.audience.iterator();
do
{
if(!iterator.hasNext())
break;
AudienceData audiencedata = (AudienceData)iterator.next();
if(audiencedata.getCircleCount() > 0)
{
CircleData acircledata[] = audiencedata.getCircles();
int i = acircledata.length;
int j = 0;
while(j < i)
{
if(acircledata[j] == null)
Log.i("AudienceView", (new StringBuilder("Added a null circle: ")).append(Thread.currentThread().getStackTrace()).toString());
j++;
}
}
} while(true);
}
mEdited = savedstate.edited;
update();
}
protected Parcelable onSaveInstanceState()
{
SavedState savedstate = new SavedState(super.onSaveInstanceState());
savedstate.audience = mChips;
savedstate.edited = mEdited;
return savedstate;
}
protected void removeLastChip()
{
if(!mChips.isEmpty())
{
mEdited = true;
int i = -1 + mChips.size();
mChips.remove(i);
update();
}
}
public final void removePerson(PersonData persondata)
{
mEdited = true;
Iterator iterator = mChips.iterator();
AudienceData audiencedata;
do
{
boolean flag = iterator.hasNext();
audiencedata = null;
if(!flag)
break;
AudienceData audiencedata1 = (AudienceData)iterator.next();
if(audiencedata1.getUserCount() != 1 || audiencedata1.getCircleCount() != 0 || !EsPeopleData.isSamePerson(audiencedata1.getUser(0), persondata))
continue;
audiencedata = audiencedata1;
break;
} while(true);
if(audiencedata != null)
{
mChips.remove(audiencedata);
update();
}
}
public final void replaceAudience(AudienceData audiencedata)
{
mEdited = true;
setAudience(audiencedata);
}
public void setAccount(EsAccount esaccount)
{
mAccount = esaccount;
}
public void setAudienceChangedCallback(Runnable runnable)
{
mAudienceChangedCallback = runnable;
}
public void setDefaultAudience(AudienceData audiencedata)
{
if(audiencedata != null)
setAudience(audiencedata);
}
protected void update() {
// TODO
}
protected void updateChip(int i, int j, int k, String s, Object obj, boolean flag) {
TextView textview;
if(i > -1 + getChipCount())
addChip(i);
textview = (TextView)mChipContainer.getChildAt(i);
textview.setCompoundDrawablesWithIntrinsicBounds(j, 0, k, 0);
textview.setText(s);
int l = 0;
if(!flag) {
CircleData circledata;
if(obj instanceof CircleData)
circledata = (CircleData)obj;
else
circledata = null;
if(circledata != null)
switch(circledata.getType())
{
default:
l = R.drawable.chip_blue;
break;
case 7: // '\007'
case 8: // '\b'
case 9: // '\t'
l = R.drawable.chip_green;
break;
}
else
l = R.drawable.chip_blue;
} else {
l = R.drawable.chip_red;
}
textview.setBackgroundResource(l);
if(textview.getVisibility() != 0)
textview.setVisibility(0);
textview.setTag(obj);
}
//==============================================================================
//
//==============================================================================
protected static interface CirclesQuery
{
public static final String PROJECTION[] = {
"circle_id", "circle_name"
};
}
public static class SavedState extends android.view.View.BaseSavedState {
public ArrayList audience;
public boolean edited;
SavedState(Parcel parcel) {
super(parcel);
audience = parcel.createTypedArrayList(AudienceData.CREATOR);
boolean flag;
if(parcel.readInt() != 0)
flag = true;
else
flag = false;
edited = flag;
}
public SavedState(Parcelable parcelable) {
super(parcelable);
}
public void writeToParcel(Parcel parcel, int i) {
super.writeToParcel(parcel, i);
parcel.writeTypedList(audience);
int j;
if(edited)
j = 1;
else
j = 0;
parcel.writeInt(j);
}
public static final android.os.Parcelable.Creator CREATOR = new android.os.Parcelable.Creator() {
public final Object createFromParcel(Parcel parcel)
{
return new SavedState(parcel);
}
public final Object[] newArray(int i)
{
return new SavedState[i];
}
};
}
}