/**
* galaxy inc.
* meetup client for android
*/
package com.galaxy.meetup.client.android.ui.fragments;
import java.io.IOException;
import java.util.HashSet;
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.content.DbPlusOneData;
import com.galaxy.meetup.client.android.content.EsAvatarData;
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.PhotoOneUpInfoView;
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;
import com.galaxy.meetup.server.client.domain.DataPlusOne;
import com.galaxy.meetup.server.client.util.JsonUtil;
/**
*
* @author sihai
*
*/
public class PhotoOneUpAdapter extends EsCursorAdapter implements
SettableItemAdapter {
private int mContainerHeight;
private HashSet mFlaggedComments;
private SparseIntArray mHeights;
private int mLeftoverPosition;
private boolean mLoading;
private final OneUpBaseView.OnMeasuredListener mOnMeasuredListener;
private final OneUpListener mOneUpListener;
private int mPhotoPosition;
public PhotoOneUpAdapter(Context context, Cursor cursor, OneUpListener oneuplistener, OneUpBaseView.OnMeasuredListener onmeasuredlistener)
{
super(context, null);
mPhotoPosition = -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:
PhotoOneUpInfoView photooneupinfoview = (PhotoOneUpInfoView)view;
photooneupinfoview.setOneUpClickListener(mOneUpListener);
photooneupinfoview.setOnMeasureListener(mOnMeasuredListener);
photooneupinfoview.setOwner(cursor.getString(3), cursor.getString(4), EsAvatarData.uncompressAvatarUrl(cursor.getString(5)));
photooneupinfoview.setCaption(cursor.getString(19));
if(!cursor.isNull(11))
photooneupinfoview.setDate(cursor.getLong(11));
photooneupinfoview.setPlusOne(cursor.getBlob(20));
photooneupinfoview.setAlbum(cursor.getString(6));
photooneupinfoview.invalidate();
photooneupinfoview.requestLayout();
break;
case 1:
String s;
byte abyte0[];
byte abyte1[];
s = cursor.getString(2);
abyte0 = cursor.getBlob(9);
abyte1 = null;
if(abyte0 != null) {
try {
byte abyte2[] = DbPlusOneData.serialize((DataPlusOne)JsonUtil.fromByteArray(abyte0, DataPlusOne.class));
abyte1 = abyte2;
} catch (IOException e) {
abyte1 = null;
}
}
boolean flag = mFlaggedComments.contains(s);
StreamOneUpCommentView streamoneupcommentview = (StreamOneUpCommentView)view;
streamoneupcommentview.setOneUpClickListener(mOneUpListener);
streamoneupcommentview.setOnMeasureListener(mOnMeasuredListener);
streamoneupcommentview.setAuthor(cursor.getString(3), cursor.getString(4), EsAvatarData.uncompressAvatarUrl(cursor.getString(5)));
streamoneupcommentview.setComment(s, cursor.getString(8), flag);
streamoneupcommentview.setPlusOne(abyte1);
streamoneupcommentview.setDate(cursor.getLong(6));
streamoneupcommentview.invalidate();
streamoneupcommentview.requestLayout();
break;
case 2:
break;
case 3:
view.findViewById(R.id.loading_spinner).setVisibility(0);
view.invalidate();
view.requestLayout();
break;
case 4:
StreamOneUpCommentCountView streamoneupcommentcountview = (StreamOneUpCommentCountView)view;
streamoneupcommentcountview.setOnMeasureListener(mOnMeasuredListener);
streamoneupcommentcountview.setCount(cursor.getInt(2));
streamoneupcommentcountview.invalidate();
streamoneupcommentcountview.requestLayout();
break;
case 5:
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);
streamoneupleftoverview.invalidate();
streamoneupleftoverview.requestLayout();
break;
default:
break;
}
}
public final int getItemViewType(int i)
{
return ((Cursor)getItem(i)).getInt(1);
}
public final int getViewTypeCount()
{
return 6;
}
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.photo_one_up_info_view, viewgroup, false);
break;
case 1:
view = layoutinflater.inflate(R.layout.stream_one_up_comment_view, viewgroup, false);
break;
case 2:
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_comment_count_view, viewgroup, false);
break;
case 5:
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(flag != mLoading)
{
mLoading = flag;
notifyDataSetChanged();
}
}
public final Cursor swapCursor(Cursor cursor)
{
mPhotoPosition = -1;
if(cursor == null) {
mHeights = null;
mLeftoverPosition = -1;
return super.swapCursor(cursor);
} else {
int i = cursor.getCount();
mHeights = new SparseIntArray(i);
mLeftoverPosition = i - 1;
if(!cursor.moveToFirst()) {
return super.swapCursor(cursor);
} else {
do {
if(cursor.getInt(1) == 0) {
mPhotoPosition = cursor.getPosition();
cursor.moveToFirst();
}
} while(cursor.moveToNext());
return super.swapCursor(cursor);
}
}
}
}