/** * galaxy inc. * meetup client for android */ package com.galaxy.meetup.client.android.ui.fragments; import java.util.HashSet; import java.util.Set; import android.content.Context; import android.database.Cursor; import android.util.SparseIntArray; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.galaxy.meetup.client.android.EsCursorAdapter; import com.galaxy.meetup.client.android.R; import com.galaxy.meetup.client.android.ui.view.OneUpBaseView; import com.galaxy.meetup.client.android.ui.view.OneUpListener; import com.galaxy.meetup.client.android.ui.view.StreamOneUpActivityView; import com.galaxy.meetup.client.android.ui.view.StreamOneUpCommentCountView; import com.galaxy.meetup.client.android.ui.view.StreamOneUpCommentView; import com.galaxy.meetup.client.android.ui.view.StreamOneUpLeftoverView; /** * * @author sihai * */ public class StreamOneUpAdapter extends EsCursorAdapter implements SettableItemAdapter { private int mActivityPosition; private int mContainerHeight; private Set mFlaggedComments; private SparseIntArray mHeights; private int mLeftoverPosition; private boolean mLoading; private final OneUpBaseView.OnMeasuredListener mOnMeasuredListener; private final OneUpListener mOneUpListener; public StreamOneUpAdapter(Context context, Cursor cursor, OneUpListener oneuplistener, OneUpBaseView.OnMeasuredListener onmeasuredlistener) { super(context, null); mActivityPosition = -1; mLeftoverPosition = -1; mOneUpListener = oneuplistener; mOnMeasuredListener = onmeasuredlistener; } public final void addFlaggedComment(String s) { mFlaggedComments.add(s); notifyDataSetChanged(); } public final void bindView(View view, Context context, Cursor cursor) { int value = cursor.getInt(1); switch(value) { case 0: StreamOneUpActivityView streamoneupactivityview = (StreamOneUpActivityView)view; streamoneupactivityview.setOneUpClickListener(mOneUpListener); streamoneupactivityview.setOnMeasureListener(mOnMeasuredListener); streamoneupactivityview.bind(cursor); break; case 1: StreamOneUpCommentCountView streamoneupcommentcountview = (StreamOneUpCommentCountView)view; streamoneupcommentcountview.setOnMeasureListener(mOnMeasuredListener); streamoneupcommentcountview.bind(cursor); break; case 2: String s = cursor.getString(5); boolean flag = mFlaggedComments.contains(s); StreamOneUpCommentView streamoneupcommentview = (StreamOneUpCommentView)view; streamoneupcommentview.setOneUpClickListener(mOneUpListener); streamoneupcommentview.setOnMeasureListener(mOnMeasuredListener); streamoneupcommentview.bind(cursor, flag); break; case 3: if(mLoading) view.findViewById(R.id.loading_spinner).setVisibility(0); else view.findViewById(R.id.loading_spinner).setVisibility(8); view.invalidate(); view.requestLayout(); break; case 4: StreamOneUpLeftoverView streamoneupleftoverview = (StreamOneUpLeftoverView)view; int i = mContainerHeight; if(mHeights != null) { for(int j = -1 + mHeights.size(); i > 0 && j >= 0; j--) { int k = mHeights.keyAt(j); i -= mHeights.get(k); } } streamoneupleftoverview.bind(i); break; default: break; } } public final String getAclText() { int i; String s; i = mActivityPosition; s = null; if(i < 0) { return s; } Cursor cursor = (Cursor)getItem(mActivityPosition); s = null; if(cursor != null) s = cursor.getString(3); return s; } public final String getActivityAuthorId() { String s; if(mActivityPosition < 0 || mActivityPosition > getCount()) s = null; else s = ((Cursor)getItem(mActivityPosition)).getString(4); return s; } public final int getItemViewType(int i) { return ((Cursor)getItem(i)).getInt(1); } public final int getViewTypeCount() { return 5; } public final View newView(Context context, Cursor cursor, ViewGroup viewgroup) { View view = null; LayoutInflater layoutinflater = (LayoutInflater)context.getSystemService("layout_inflater"); int value = cursor.getInt(1); switch(value) { case 0: view = layoutinflater.inflate(R.layout.stream_one_up_activity_view, viewgroup, false); break; case 1: view = layoutinflater.inflate(R.layout.stream_one_up_comment_count_view, viewgroup, false); break; case 2: view = layoutinflater.inflate(R.layout.stream_one_up_comment_view, viewgroup, false); break; case 3: view = layoutinflater.inflate(R.layout.stream_one_up_loading_view, viewgroup, false); break; case 4: view = layoutinflater.inflate(R.layout.stream_one_up_leftover_view, viewgroup, false); mLeftoverPosition = cursor.getPosition(); break; default: break; } return view; } public final void removeFlaggedComment(String s) { mFlaggedComments.remove(s); notifyDataSetChanged(); } public final void setContainerHeight(int i) { mContainerHeight = i; } public final void setFlaggedComments(HashSet hashset) { mFlaggedComments = hashset; } public final void setItemHeight(int i, int j) { if(i >= 0 && mHeights != null && i != mLeftoverPosition) mHeights.put(i, j); } public final void setLoading(boolean flag) { if(mLoading != flag) { mLoading = flag; notifyDataSetChanged(); } } public final Cursor swapCursor(Cursor cursor) { mActivityPosition = -1; if(cursor == null) { mHeights = null; mLeftoverPosition = -1; } else { int i = cursor.getCount(); mHeights = new SparseIntArray(i); mLeftoverPosition = i - 1; while(cursor.moveToNext()) { if(cursor.getInt(1) == 0) { mActivityPosition = cursor.getPosition(); break; } } cursor.moveToFirst(); } return super.swapCursor(cursor); } public static interface ActivityQuery { public static final String PROJECTION[] = { "2147483647 AS _id", "0 AS row_type", "activity_id", "acl_display", "author_id", "name", "avatar", "total_comment_count", "plus_one_data", "loc", "created", "is_edited", "modified", "source_id", "source_name", "public", "spam", "can_comment", "can_reshare", "has_muted", "data_state", "content_flags", "annotation", "title", "original_author_id", "original_author_name", "embed_deep_link", "embed_appinvite", "embed_media", "embed_skyjam", "embed_place_review", "embed_hangout", "embed_square", "embed_emotishare" }; } public static interface CommentCountQuery { public static final String PROJECTION[] = { "2147483646 AS _id", "1 AS row_type", "COUNT(*) AS _count" }; } public static interface CommentQuery { public static final String PROJECTION[] = { "_id", "2 AS row_type", "author_id", "name", "avatar", "comment_id", "content", "created", "plus_one_data" }; } public static interface LeftoverQuery { public static final String PROJECTION[] = { "2147483645 AS _id", "4 AS row_type" }; } public static interface LoadingQuery { public static final String PROJECTION[] = { "0 AS _id", "3 AS row_type" }; } }