/** * galaxy inc. * meetup client for android */ package com.galaxy.meetup.client.android.ui.fragments; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.content.res.Resources; import android.database.Cursor; import android.database.DataSetObserver; import android.support.v4.app.LoaderManager; import android.text.TextUtils; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import com.galaxy.meetup.client.android.EsCursorAdapter; import com.galaxy.meetup.client.android.R; import com.galaxy.meetup.client.android.content.EsAccount; import com.galaxy.meetup.client.android.content.EsAccountsData; import com.galaxy.meetup.client.android.content.EsAvatarData; import com.galaxy.meetup.client.android.service.CircleMembershipManager; import com.galaxy.meetup.client.android.service.EsService; import com.galaxy.meetup.client.android.ui.activity.OobDeviceActivity; import com.galaxy.meetup.client.android.ui.view.PersonCardView; import com.galaxy.meetup.server.client.domain.DataCircleMemberProperties; import com.galaxy.meetup.server.client.domain.DataSugggestionExplanation; import com.galaxy.meetup.server.client.util.JsonUtil; /** * * @author sihai * */ public class SuggestionGridAdapter extends EsCursorAdapter implements PersonCardView.OnPersonCardClickListener { public static final String PROJECTION[] = { "_id", "person_id", "gaia_id", "name", "avatar", "packed_circle_ids", "profile_type", "category", "category_label", "explanation", "properties", "suggestion_id" }; private final EsAccount mAccount; private List mCategories; private final DataSetObserver mCircleContentObserver = new DataSetObserver() { public final void onChanged() { if(getCursor() != null && !getCursor().isClosed()) notifyDataSetChanged(); } }; private final CircleNameResolver mCircleNameResolver; private CircleSpinnerAdapter mCircleSpinnerAdapter; private SuggestionGridAdapterListener mListener; private final String mSuggestionUi; private String mTooltipPersonId; private boolean mValid; public SuggestionGridAdapter(Context context, LoaderManager loadermanager, EsAccount esaccount, int i) { super(context, null); mCategories = new ArrayList(); mAccount = esaccount; mCircleNameResolver = new CircleNameResolver(context, loadermanager, esaccount, i); mCircleNameResolver.registerObserver(mCircleContentObserver); mCircleSpinnerAdapter = new CircleSpinnerAdapter(mContext); mCircleSpinnerAdapter.setNotifyOnChange(false); String s; if(context instanceof OobDeviceActivity) s = "SIGNUP"; else s = "ANDROID_PEOPLE_SUGGESTIONS_PAGE"; mSuggestionUi = s; } private void recordSuggestionAction(PersonCardView personcardview, String s) { List arraylist = new ArrayList(); arraylist.add(personcardview.getPersonId()); List arraylist1 = new ArrayList(); arraylist1.add(personcardview.getSuggestionId()); EsService.recordSuggestionAction(mContext, mAccount, mSuggestionUi, (ArrayList)arraylist, (ArrayList)arraylist1, s); } public final void bindView(View view, Context context, Cursor cursor) { String s = cursor.getString(1); String s1 = cursor.getString(2); String s2 = cursor.getString(4); String s3 = cursor.getString(11); PersonCardView personcardview = (PersonCardView)view; personcardview.setCircleNameResolver(mCircleNameResolver); personcardview.setOnPersonCardClickListener(this); personcardview.setContactName(cursor.getString(3)); personcardview.setPersonId(s); personcardview.setGaiaIdAndAvatarUrl(s1, EsAvatarData.uncompressAvatarUrl(s2)); personcardview.setSuggestionId(s3); Resources resources = context.getResources(); byte abyte0[] = cursor.getBlob(9); String s4; String s6; String s7; boolean flag; boolean flag1; int i; if(abyte0 != null) { DataSugggestionExplanation datasugggestionexplanation = (DataSugggestionExplanation)JsonUtil.fromByteArray(abyte0, DataSugggestionExplanation.class); Integer integer = datasugggestionexplanation.numberOfCommonFriends; s4 = null; if(integer != null) { int k = datasugggestionexplanation.numberOfCommonFriends.intValue(); s4 = null; if(k > 0) { int l = R.plurals.common_friend_count; int i1 = datasugggestionexplanation.numberOfCommonFriends.intValue(); Object aobj1[] = new Object[1]; aobj1[0] = datasugggestionexplanation.numberOfCommonFriends; s4 = resources.getQuantityString(l, i1, aobj1); } } } else { byte abyte1[] = cursor.getBlob(10); s4 = null; if(abyte1 != null) { DataCircleMemberProperties datacirclememberproperties = (DataCircleMemberProperties)JsonUtil.fromByteArray(abyte1, DataCircleMemberProperties.class); if(datacirclememberproperties.tagLine != null) s4 = datacirclememberproperties.tagLine; else if(datacirclememberproperties.company != null) { if(datacirclememberproperties.occupation != null) { int j = R.string.people_search_job; Object aobj[] = new Object[2]; aobj[0] = datacirclememberproperties.occupation; aobj[1] = datacirclememberproperties.company; s4 = resources.getString(j, aobj); } else { s4 = datacirclememberproperties.company; } } else if(datacirclememberproperties.occupation != null) s4 = datacirclememberproperties.occupation; else if(datacirclememberproperties.school != null) { s4 = datacirclememberproperties.school; } else { String s5 = datacirclememberproperties.location; s4 = null; if(s5 != null) s4 = datacirclememberproperties.location; } } } personcardview.setPackedCircleIdsEmailAndDescription(null, null, s4, false, false); s6 = cursor.getString(5); s7 = cursor.getString(7); if(CircleMembershipManager.isCircleMembershipRequestPending(s)) { personcardview.setShowCircleChangePending(true); } else { personcardview.setShowCircleChangePending(false); personcardview.setOneClickCircles(s6, mCircleSpinnerAdapter, "#".equals(s7)); } flag = TextUtils.equals(mTooltipPersonId, s); flag1 = false; if(flag) { boolean flag2 = TextUtils.isEmpty(s6); flag1 = false; if(!flag2) { flag1 = true; mTooltipPersonId = null; } } i = R.string.added_to_circles_tooltip; personcardview.setShowTooltip(flag1, i); personcardview.setDismissActionButtonVisible(TextUtils.isEmpty(s6)); } public final List getCategories() { List arraylist; if(mValid) { arraylist = mCategories; } else { Cursor cursor = getCursor(); if(cursor == null) { mCategories.clear(); mValid = true; arraylist = mCategories; } else { boolean flag = cursor.moveToFirst(); SuggestionCategoryAdapter suggestioncategoryadapter = null; int i = 0; if(flag) do { String s = cursor.getString(7); if(suggestioncategoryadapter == null || !TextUtils.equals(s, suggestioncategoryadapter.mCategory)) { if(suggestioncategoryadapter != null) suggestioncategoryadapter.mCount = cursor.getPosition() - suggestioncategoryadapter.mOffset; if(i < mCategories.size()) { suggestioncategoryadapter = (SuggestionCategoryAdapter)mCategories.get(i); } else { suggestioncategoryadapter = new SuggestionCategoryAdapter(); mCategories.add(suggestioncategoryadapter); } suggestioncategoryadapter.mCategory = s; suggestioncategoryadapter.mCategoryLabel = cursor.getString(8); suggestioncategoryadapter.mOffset = cursor.getPosition(); i++; } } while(cursor.moveToNext()); if(suggestioncategoryadapter != null) suggestioncategoryadapter.mCount = cursor.getCount() - suggestioncategoryadapter.mOffset; for(; mCategories.size() > i; mCategories.remove(-1 + mCategories.size())); mValid = true; arraylist = mCategories; } } return arraylist; } public final View newView(Context context, Cursor cursor, ViewGroup viewgroup) { PersonCardView personcardview = new PersonCardView(context); personcardview.setAutoWidthForHorizontalScrolling(); return personcardview; } public final void onActionButtonClick(PersonCardView personcardview, int i) { } public final void onChangeCircles(PersonCardView personcardview) { if(personcardview.isOneClickAdd()) { mListener.onAddPersonToCirclesAction(personcardview.getPersonId(), personcardview.getContactName(), personcardview.isForSharing()); if(!EsAccountsData.hasOneClickAddTooltipBeenShown(mContext, mAccount)) { EsAccountsData.setOneClickAddTooltipShown(mContext, mAccount); mTooltipPersonId = personcardview.getPersonId(); } recordSuggestionAction(personcardview, "ACCEPT"); } else { mListener.onChangeCirclesAction(personcardview.getPersonId(), personcardview.getContactName()); } } public final void onDismissButtonClick(PersonCardView personcardview) { mListener.onDismissSuggestionAction(personcardview.getPersonId(), personcardview.getSuggestionId()); } public final void onItemClick(PersonCardView personcardview) { mListener.onPersonSelected(personcardview.getPersonId()); recordSuggestionAction(personcardview, "CLICK"); } public final void onStart() { mCircleNameResolver.initLoader(); } public final void setCircleSpinnerAdapter(CircleSpinnerAdapter circlespinneradapter) { mCircleSpinnerAdapter = circlespinneradapter; } public final void setListener(SuggestionGridAdapterListener suggestiongridadapterlistener) { mListener = suggestiongridadapterlistener; } public final Cursor swapCursor(Cursor cursor) { mValid = false; return super.swapCursor(cursor); } public final class SuggestionCategoryAdapter extends BaseAdapter { private String mCategory; private String mCategoryLabel; private int mCount; private int mOffset; public final String getCategory() { return mCategory; } public final String getCategoryLabel() { return mCategoryLabel; } public final int getCount() { return mCount; } public final Object getItem(int i) { return SuggestionGridAdapter.this.getItem(i + mOffset); } public final long getItemId(int i) { return SuggestionGridAdapter.this.getItemId(i + mOffset); } public final View getView(int i, View view, ViewGroup viewgroup) { View view1 = SuggestionGridAdapter.this.getView(i + mOffset, view, viewgroup); if(view1 instanceof PersonCardView) { PersonCardView personcardview = (PersonCardView)view1; boolean flag; if(i == 0) flag = true; else flag = false; personcardview.setWideMargin(flag); } return view1; } public final String toString() { return (new StringBuilder()).append(mCategoryLabel).append(": ").append(mCount).toString(); } } public static interface SuggestionGridAdapterListener { public abstract void onAddPersonToCirclesAction(String s, String s1, boolean flag); public abstract void onChangeCirclesAction(String s, String s1); public abstract void onDismissSuggestionAction(String s, String s1); public abstract void onPersonSelected(String s); } }