/**
* galaxy inc.
* meetup client for android
*/
package com.galaxy.meetup.client.android.ui.view;
import java.util.ArrayList;
import android.content.Context;
import android.database.Cursor;
import android.database.DataSetObserver;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.Loader;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.HorizontalScrollView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.galaxy.meetup.client.android.EsCursorLoader;
import com.galaxy.meetup.client.android.R;
import com.galaxy.meetup.client.android.content.AudienceData;
import com.galaxy.meetup.client.android.content.EsAccount;
import com.galaxy.meetup.client.android.content.EsPeopleData;
import com.galaxy.meetup.client.android.content.EsProvider;
import com.galaxy.meetup.client.android.content.PersonData;
import com.galaxy.meetup.client.android.ui.fragments.CircleNameResolver;
/**
*
* @author sihai
*
*/
public class HangoutInviteesView extends FrameLayout {
private static final String INVITEE_PROJECTION[] = {
"packed_circle_ids"
};
private EsAccount mAccount;
private AvatarView mAvatarView;
private View mCircleLogoView;
private CircleNameResolver mCircleNameResolver;
private TextView mCirclesView;
private String mInviteeId;
private ArrayList mInvitees;
private LinearLayout mMultipleInviteesContainer;
private HorizontalScrollView mMultipleInviteesView;
private TextView mNameView;
private String mPackedCircleIds;
private final PersonLoaderCallbacks mPersonLoaderCallbacks;
private View mSingleInviteeView;
public HangoutInviteesView(Context context)
{
super(context);
mInvitees = new ArrayList();
mPersonLoaderCallbacks = new PersonLoaderCallbacks();
addView(inflate(R.layout.hangout_invitees_view));
addView(createMultipleInviteesView());
mAvatarView = (AvatarView)findViewById(R.id.avatar);
mNameView = (TextView)findViewById(R.id.name);
mCirclesView = (TextView)findViewById(R.id.circles);
mSingleInviteeView = findViewById(R.id.single_invitee_view);
mCircleLogoView = findViewById(R.id.circle_logo);
}
public HangoutInviteesView(Context context, AttributeSet attributeset)
{
super(context, attributeset);
mInvitees = new ArrayList();
mPersonLoaderCallbacks = new PersonLoaderCallbacks();
addView(inflate(R.layout.hangout_invitees_view));
addView(createMultipleInviteesView());
mAvatarView = (AvatarView)findViewById(R.id.avatar);
mNameView = (TextView)findViewById(R.id.name);
mCirclesView = (TextView)findViewById(R.id.circles);
mSingleInviteeView = findViewById(R.id.single_invitee_view);
mCircleLogoView = findViewById(R.id.circle_logo);
}
public HangoutInviteesView(Context context, AttributeSet attributeset, int i)
{
super(context, attributeset, i);
mInvitees = new ArrayList();
mPersonLoaderCallbacks = new PersonLoaderCallbacks();
addView(inflate(R.layout.hangout_invitees_view));
addView(createMultipleInviteesView());
mAvatarView = (AvatarView)findViewById(R.id.avatar);
mNameView = (TextView)findViewById(R.id.name);
mCirclesView = (TextView)findViewById(R.id.circles);
mSingleInviteeView = findViewById(R.id.single_invitee_view);
mCircleLogoView = findViewById(R.id.circle_logo);
}
private HorizontalScrollView createMultipleInviteesView()
{
Context context = getContext();
mMultipleInviteesView = new HorizontalScrollView(context);
android.widget.FrameLayout.LayoutParams layoutparams = new android.widget.FrameLayout.LayoutParams(-1, -1);
mMultipleInviteesView.setLayoutParams(layoutparams);
mMultipleInviteesView.setBackgroundResource(R.color.hangout_common_menu_background);
mMultipleInviteesView.setVisibility(8);
mMultipleInviteesContainer = new LinearLayout(context);
android.widget.FrameLayout.LayoutParams layoutparams1 = new android.widget.FrameLayout.LayoutParams(-2, -1);
mMultipleInviteesView.addView(mMultipleInviteesContainer, layoutparams1);
return mMultipleInviteesView;
}
private static String getGaiaId(PersonData persondata)
{
String s;
if(persondata.getObfuscatedId() != null)
s = (new StringBuilder()).append(persondata.getObfuscatedId()).toString();
else
s = "";
return s;
}
private View inflate(int i)
{
return LayoutInflater.from(getContext()).inflate(i, this, false);
}
public final int getAvatarCount()
{
return mInvitees.size();
}
public void setInvitees(AudienceData audiencedata, EsAccount esaccount)
{
Context context;
context = getContext();
mAccount = esaccount;
mInvitees.clear();
PersonData apersondata[] = audiencedata.getUsers();
int i = apersondata.length;
for(int j = 0; j < i; j++)
{
PersonData persondata = apersondata[j];
if(!TextUtils.isEmpty(persondata.getName()) && !TextUtils.isEmpty(persondata.getObfuscatedId()))
mInvitees.add(persondata);
}
if(mInvitees.size() != 1) {
if(mInvitees.size() > 1)
{
mSingleInviteeView.setVisibility(8);
mMultipleInviteesView.setVisibility(0);
mMultipleInviteesContainer.removeAllViews();
int k = 0;
int l = mInvitees.size();
while(k < l)
{
String s = getGaiaId((PersonData)mInvitees.get(k));
LinearLayout linearlayout = mMultipleInviteesContainer;
AvatarView avatarview = new AvatarView(getContext());
avatarview.setGaiaId(s);
int i1 = getResources().getDimensionPixelSize(R.dimen.hangout_invitees_view_height);
android.widget.LinearLayout.LayoutParams layoutparams = new android.widget.LinearLayout.LayoutParams(i1, i1);
layoutparams.rightMargin = getResources().getDimensionPixelSize(R.dimen.hangout_avatar_margin);
avatarview.setLayoutParams(layoutparams);
linearlayout.addView(avatarview);
k++;
}
}
} else {
mInviteeId = getGaiaId((PersonData)mInvitees.get(0));
mSingleInviteeView.setVisibility(0);
mMultipleInviteesView.setVisibility(8);
String s1 = (new StringBuilder()).append(((PersonData)mInvitees.get(0)).getName()).toString();
mNameView.setText(s1);
mAvatarView.setGaiaId(mInviteeId);
LoaderManager loadermanager = ((FragmentActivity)getContext()).getSupportLoaderManager();
loadermanager.initLoader(0, null, mPersonLoaderCallbacks);
mCircleNameResolver = new CircleNameResolver(context, loadermanager, mAccount);
mCircleNameResolver.initLoader();
mCircleNameResolver.registerObserver(new DataSetObserver() {
public final void onChanged()
{
HangoutInviteesView.access$100(HangoutInviteesView.this);
}
});
}
}
public void setName(String s)
{
mNameView.setVisibility(0);
mNameView.setText(s);
}
public void setVisibility(int i)
{
super.setVisibility(i);
if(i == 8)
{
mSingleInviteeView.setVisibility(8);
mMultipleInviteesView.setVisibility(8);
}
}
static void access$100(HangoutInviteesView hangoutinviteesview)
{
if(hangoutinviteesview.mPackedCircleIds != null && hangoutinviteesview.mCircleNameResolver != null && hangoutinviteesview.mCircleNameResolver.isLoaded() && hangoutinviteesview.mCirclesView != null)
{
hangoutinviteesview.mCircleLogoView.setVisibility(0);
hangoutinviteesview.mCirclesView.setText(hangoutinviteesview.mCircleNameResolver.getCircleNamesForPackedIds(hangoutinviteesview.mPackedCircleIds));
}
return;
}
//==================================================================================================================
// Inner class
//==================================================================================================================
private final class PersonLoaderCallbacks implements android.support.v4.app.LoaderManager.LoaderCallbacks {
public final Loader onCreateLoader(int i, Bundle bundle)
{
Object obj;
if(mAccount == null || mInviteeId == null)
{
obj = null;
} else
{
final Context context = getContext();
Uri uri = EsProvider.appendAccountParameter(EsProvider.CONTACTS_URI, mAccount);
String as[] = HangoutInviteesView.INVITEE_PROJECTION;
String as1[] = new String[1];
as1[0] = mInviteeId;
obj = new EsCursorLoader(context, uri, as, "gaia_id=?", as1, null) {
public final Cursor esLoadInBackground()
{
EsPeopleData.ensurePeopleSynced(context, mAccount);
return super.esLoadInBackground();
}
};
}
return ((Loader) (obj));
}
public final void onLoadFinished(Loader loader, Object obj)
{
Cursor cursor = (Cursor)obj;
if(cursor != null && cursor.moveToFirst())
{
mPackedCircleIds = cursor.getString(0);
HangoutInviteesView.access$100(HangoutInviteesView.this);
}
}
public final void onLoaderReset(Loader loader)
{
}
}
}