/**
* galaxy inc.
* meetup client for android
*/
package com.galaxy.meetup.client.android;
import java.util.HashSet;
import java.util.Set;
import android.animation.Animator;
import android.content.Context;
import android.database.Cursor;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewPropertyAnimator;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.Interpolator;
import com.galaxy.meetup.client.android.common.EsCompositeCursorAdapter;
import com.galaxy.meetup.client.android.common.Recyclable;
import com.galaxy.meetup.client.android.content.EsAccount;
import com.galaxy.meetup.client.android.controller.ComposeBarController;
import com.galaxy.meetup.client.android.service.EsService;
import com.galaxy.meetup.client.android.service.ResourceConsumer;
import com.galaxy.meetup.client.android.ui.view.ColumnGridView;
import com.galaxy.meetup.client.android.ui.view.DummyCardView;
import com.galaxy.meetup.client.android.ui.view.EmotiShareCardView;
import com.galaxy.meetup.client.android.ui.view.EventStreamCardView;
import com.galaxy.meetup.client.android.ui.view.HangoutCardView;
import com.galaxy.meetup.client.android.ui.view.ImageCardView;
import com.galaxy.meetup.client.android.ui.view.ItemClickListener;
import com.galaxy.meetup.client.android.ui.view.LinksCardView;
import com.galaxy.meetup.client.android.ui.view.PlaceReviewCardView;
import com.galaxy.meetup.client.android.ui.view.SkyjamCardView;
import com.galaxy.meetup.client.android.ui.view.SquareCardView;
import com.galaxy.meetup.client.android.ui.view.StreamCardView;
import com.galaxy.meetup.client.android.ui.view.TextCardView;
import com.galaxy.meetup.client.util.Property;
import com.galaxy.meetup.client.util.ResourceRedirector;
import com.galaxy.meetup.client.util.ScreenMetrics;
/**
*
* @author sihai
*
*/
public class StreamAdapter extends EsCompositeCursorAdapter implements
StreamCardView.ViewedListener, TranslationAdapter.TranslationListAdapter {
private static Interpolator sDecelerateInterpolator = new DecelerateInterpolator();
protected static ScreenMetrics sScreenMetrics;
protected EsAccount mAccount;
private int mBoxLayout[][];
private int mCardTypes[];
private ComposeBarController mComposeBarController;
private ItemClickListener mItemClickListener;
protected boolean mLandscape;
private boolean mMarkPostsAsRead;
private android.view.View.OnClickListener mOnClickListener;
private StreamCardView.StreamMediaClickListener mStreamMediaClickListener;
private StreamCardView.StreamPlusBarClickListener mStreamPlusBarClickListener;
private ViewUseListener mViewUseListener;
private final Set mViewerHasReadPosts = new HashSet();
protected int mVisibleIndex;
public StreamAdapter(final Context context, ColumnGridView columngridview, EsAccount esaccount, View.OnClickListener onclicklistener, ItemClickListener itemclicklistener, ViewUseListener viewuselistener, StreamCardView.StreamPlusBarClickListener streamplusbarclicklistener,
StreamCardView.StreamMediaClickListener streammediaclicklistener, ComposeBarController composebarcontroller)
{
super(context);
int i = 1;
mVisibleIndex = 0x80000000;
addPartition(false, false);
addPartition(false, false);
addPartition(false, false);
mAccount = esaccount;
mOnClickListener = onclicklistener;
mItemClickListener = itemclicklistener;
mStreamPlusBarClickListener = streamplusbarclicklistener;
mStreamMediaClickListener = streammediaclicklistener;
mViewUseListener = viewuselistener;
mMarkPostsAsRead = false;
int j = context.getResources().getConfiguration().orientation;
boolean flag = false;
if(j == 2)
flag = true;
mLandscape = flag;
if(sScreenMetrics == null)
sScreenMetrics = ScreenMetrics.getInstance(context);
mComposeBarController = composebarcontroller;
int k;
if(mLandscape)
k = i;
else
k = 2;
columngridview.setOrientation(k);
if(sScreenMetrics.screenDisplayType != 0)
i = 2;
columngridview.setColumnCount(i);
columngridview.setItemMargin(sScreenMetrics.itemMargin);
columngridview.setPadding(sScreenMetrics.itemMargin, sScreenMetrics.itemMargin, sScreenMetrics.itemMargin, sScreenMetrics.itemMargin);
columngridview.setOnScrollListener(new ColumnGridView.OnScrollListener() {
public final void onScroll(ColumnGridView columngridview1, int l, int i1, int j1, int k1, int l1)
{
if(mComposeBarController != null)
mComposeBarController.onScroll(columngridview1, l, i1, j1, k1, l1);
if(android.os.Build.VERSION.SDK_INT >= 12 && j1 != 0)
{
int i2 = 0x80000000;
int j2 = 50;
int k2 = 0;
while(k2 < j1)
{
int l2 = l + k2;
if(l2 <= mVisibleIndex)
continue;
i2 = Math.max(i2, l2);
final View view = columngridview1.getChildAt(k2);
if(view.getId() == R.id.compose_bar)
continue;
ScreenMetrics screenmetrics = ScreenMetrics.getInstance(context);
boolean flag1;
int i3;
int j3;
float f;
float f1;
float f2;
float f3;
ViewPropertyAnimator viewpropertyanimator;
if(context.getResources().getConfiguration().orientation == 2)
flag1 = true;
else
flag1 = false;
i3 = (int)view.getTranslationX();
j3 = (int)view.getTranslationY();
if(flag1)
f = screenmetrics.longDimension / 3;
else
f = 0.0F;
view.setTranslationX(f);
if(flag1)
f1 = 0.0F;
else
f1 = screenmetrics.longDimension / 3;
view.setTranslationY(f1);
if(flag1)
f2 = 0.0F;
else
f2 = 10F;
view.setRotationX(f2);
if(flag1)
f3 = -10F;
else
f3 = 0.0F;
view.setRotationY(f3);
viewpropertyanimator = view.animate().rotationX(0.0F).rotationY(0.0F).translationX(i3).translationY(j3).setDuration(500L).setInterpolator(StreamAdapter.sDecelerateInterpolator);
viewpropertyanimator.setListener(new android.animation.Animator.AnimatorListener() {
public final void onAnimationCancel(Animator animator)
{
}
public final void onAnimationEnd(Animator animator)
{
view.setTranslationX(0.0F);
view.setTranslationY(0.0F);
view.setRotationX(0.0F);
view.setRotationY(0.0F);
view.invalidate();
}
public final void onAnimationRepeat(Animator animator)
{
}
public final void onAnimationStart(Animator animator)
{
}
});
if(android.os.Build.VERSION.SDK_INT >= 14)
viewpropertyanimator.setStartDelay(j2).start();
j2 += 50;
k2++;
}
mVisibleIndex = Math.max(mVisibleIndex, i2);
}
}
public final void onScrollStateChanged(ColumnGridView columngridview1, int l)
{
if(mComposeBarController != null)
mComposeBarController.onScrollStateChanged(columngridview1, l);
}
});
columngridview.setRecyclerListener(new ColumnGridView.RecyclerListener() {
public final void onMovedToScrapHeap(View view) {
if(view instanceof Recyclable)
((Recyclable)view).onRecycle();
}
});
}
private boolean isBoxStart(int i)
{
// TODO
return false;
}
private void recreateBoxLayout()
{
// TODO
}
public void bindStreamHeaderView(View view, Cursor cursor)
{
}
public void bindStreamView(View view, Cursor cursor)
{
int i;
int j;
StreamCardView streamcardview;
byte byte0;
i = cursor.getPosition() + getPositionForPartition(1);
j = mCardTypes[i];
streamcardview = (StreamCardView)view;
if(mLandscape)
byte0 = 1;
else
byte0 = 2;
int k;
int l;
switch(j) {
case 0:
k = 1;
l = 1;
break;
case 1:
if(mLandscape)
k = 2;
else
k = 1;
if(mLandscape)
l = 1;
else
l = 2;
break;
case 2:
if(mLandscape)
k = 1;
else
k = 2;
if(mLandscape)
l = 2;
else
l = 1;
break;
case 3:
k = 2;
l = 2;
break;
default:
throw new IllegalStateException();
}
ColumnGridView.LayoutParams layoutparams = new ColumnGridView.LayoutParams(byte0, -3, k, l);
layoutparams.isBoxStart = isBoxStart(i);
if(!mLandscape && sScreenMetrics.screenDisplayType == 0 && ((view instanceof TextCardView) || (view instanceof EventStreamCardView)))
layoutparams.height = -2;
streamcardview.setLayoutParams(layoutparams);
streamcardview.init(cursor, j, 0, mOnClickListener, mItemClickListener, this, mStreamPlusBarClickListener, mStreamMediaClickListener);
if(mViewUseListener != null)
mViewUseListener.onViewUsed(i);
return;
}
protected final void bindView(View view, int i, Cursor cursor, int j) {
if(view instanceof ResourceConsumer)
((ResourceConsumer)view).unbindResources();
if(0 == i) {
bindStreamHeaderView(view, cursor);
} else if(1 == i) {
bindStreamView(view, cursor);
} else {
if(view instanceof ResourceConsumer)
((ResourceConsumer)view).bindResources();
}
}
public final void changeStreamCursor(Cursor cursor)
{
super.changeCursor(1, cursor);
recreateBoxLayout();
}
public final void changeStreamHeaderCursor(Cursor cursor)
{
int i = getCount(0);
super.changeCursor(0, cursor);
if(getCount(0) != i)
recreateBoxLayout();
}
public final int getColumnCount()
{
int i;
if(sScreenMetrics.screenDisplayType == 0)
i = 1;
else
i = 2;
return i;
}
protected final int getItemViewType(int i, int j) {
int k = 0;
if(0 == i) {
k = getStreamHeaderViewType(j);
} else if (1 == i) {
k = getStreamItemViewType(j);
} else {
}
return k;
}
public final int[][] getLayoutArray()
{
return mBoxLayout;
}
public int getStreamHeaderViewType(int i) {
return 0;
}
public int getStreamItemViewType(int i) {
int j;
long l;
j = 1;
Cursor cursor = getCursor(j);
cursor.moveToPosition(i);
l = cursor.getLong(15);
if((4096L & l) == 0L)
if((8192L & l) != 0L)
j = 5;
else
if((16384L & l) != 0L)
j = 4;
else
if((0x400000L & l) != 0L)
j = 9;
else
if((0x10000L & l) != 0L)
j = 7;
else
if((0x300000L & l) != 0L)
j = 8;
else
if((160L & l) != 0L)
{
if((32772L & l) != 0L)
j = 2;
else
j = 3;
} else
if((15L & l) == 0L)
j = 0;
else
j = 6;
return j;
}
public int getViewTypeCount()
{
return 10;
}
public boolean hasStableIds()
{
return false;
}
public boolean isEmpty()
{
boolean flag = true;
if(getCount(1) != 0)
flag = false;
return flag;
}
public final boolean isHorizontal()
{
return mLandscape;
}
public View newStreamHeaderView(Context context, Cursor cursor)
{
return null;
}
public View newStreamView(Context context, Cursor cursor, ViewGroup viewgroup) {
long l = cursor.getLong(15);
Object obj;
if((4096L & l) != 0L)
obj = new EventStreamCardView(context);
else
if((8192L & l) != 0L)
obj = new HangoutCardView(context);
else
if((16384L & l) != 0L) {
obj = new SkyjamCardView(context);
} else {
ResourceRedirector.getInstance();
if(Property.ENABLE_EMOTISHARE.getBoolean() && (0x400000L & l) != 0L)
obj = new EmotiShareCardView(context);
else
if((0x10000L & l) != 0L)
obj = new PlaceReviewCardView(context);
else
if((160L & l) != 0L)
{
if((32772L & l) != 0L)
obj = new LinksCardView(context);
else
obj = new ImageCardView(context);
} else
if((0x300000L & l) != 0L)
obj = new SquareCardView(context);
else
if((0x20000L & l) != 0L)
obj = new LinksCardView(context);
else
if((15L & l) != 0L)
obj = new TextCardView(context);
else
obj = new DummyCardView(context);
}
return ((View) (obj));
}
protected final View newView(Context context, int partion, Cursor cursor, int position, ViewGroup parent) {
View view = null;
if(0 == partion) {
view = newStreamHeaderView(context, cursor);
} else if(1 == partion) {
view = newStreamView(context, cursor, parent);
} else {
}
return view;
}
public final void onPause()
{
if(!mViewerHasReadPosts.isEmpty())
{
EsService.markActivitiesAsRead(getContext(), mAccount, (String[])mViewerHasReadPosts.toArray(new String[mViewerHasReadPosts.size()]));
mViewerHasReadPosts.clear();
}
}
public final void onStreamCardViewed(String s)
{
if(mMarkPostsAsRead)
mViewerHasReadPosts.add(s);
}
public void resetAnimationState()
{
mVisibleIndex = 0x80000000;
}
public final void setMarkPostsAsRead(boolean flag)
{
mMarkPostsAsRead = flag;
}
public static interface StreamQuery {
String PROJECTION_ACTIVITY[] = {
"_id", "activity_id", "author_id", "name", "avatar", "plus_one_data", "total_comment_count", "loc", "created", "public",
"spam", "has_read", "can_reshare", "event_data", "popular_post", "content_flags", "annotation_plaintext", "title_plaintext", "original_author_id", "original_author_name"
};
String PROJECTION_STREAM[] = {
"_id", "activity_id", "author_id", "name", "avatar", "plus_one_data", "total_comment_count", "loc", "created", "public",
"spam", "has_read", "can_reshare", "event_data", "popular_post", "content_flags", "annotation_plaintext", "title_plaintext", "original_author_id", "original_author_name",
"last_activity", "source_name", "embed_media", "embed_skyjam", "embed_place_review", "embed_hangout", "embed_appinvite", "embed_square", "embed_emotishare"
};
}
public static interface ViewUseListener {
void onViewUsed(int i);
}
}