package com.bocai.widget;
import android.content.Context;
import android.database.DataSetObserver;
import android.graphics.*;
import android.util.AttributeSet;
import android.util.Log;
import android.view.*;
import android.view.animation.AnimationUtils;
import android.view.animation.Transformation;
import android.widget.*;
import java.util.*;
import com.sonyericsson.util.Dynamics;
@SuppressWarnings({ "rawtypes" })
public class HorizontalListView extends AdapterView {
public HorizontalListView(Context context, AttributeSet attributeset) {
super(context, attributeset);
mTouchState = 0;
mItemSpacing = 0;
mCachedItemViews = new LinkedList();
mLastSnapPos = 0x80000000;
mFooterViewInfos = new ArrayList();
mFooterViewSet = new HashSet();
}
private void addAndMeasureChild(View view, int i) {
Log.i(LOG_TAG, "addAndMeasureChild method");
LayoutParams layoutparams = view.getLayoutParams();
if (layoutparams == null) {
layoutparams = generateDefaultLayoutParams();
view.setLayoutParams(layoutparams);
}
int j;
int k;
int l;
int i1;
int j1;
int k1;
int l1;
int i2;
int j2;
if (i == 1)
j = 0;
else
j = -1;
view.setDrawingCacheEnabled(true);
addViewInLayout(view, j, layoutparams, true);
l = getPaddingTop();
i1 = getPaddingBottom();
j1 = l + i1;
k1 = layoutparams.height;
l1 = ViewGroup.getChildMeasureSpec(mHeightMeasureSpec, j1, k1);
i2 = layoutparams.width;
if (i2 > 0)
j2 = MeasureSpec.makeMeasureSpec(i2, 0x40000000);
else
j2 = MeasureSpec.makeMeasureSpec(0, 0);
view.measure(j2, l1);
}
private void clickChildAt(int i, int j) {
int k = getContainingChildIndex(i, j);
if (k == -1) {
return;
} else {
View view = getChildAt(k);
int l = mFirstItemPosition + k;
long l1 = mAdapter.getItemId(l);
performItemClick(view, l, l1);
return;
}
}
private final int computeLeftRight(int i, boolean flag) {
int j1;
int k1;
int l1;
int j = getPaddingLeft();
int k = mListLeft;
int l = j + k;
int i1 = mListLeftOffset;
j1 = l + i1;
k1 = getChildCount();
l1 = 0;
while (true) {
int i2;
int j2;
if (l1 >= k1) {
break;
}
View view = getChildAt(l1);
i2 = view.getMeasuredWidth();
j2 = getChildMargin(view);
if (l1 == i) {
int l2 = j2 * 2 + i2;
j1 += l2;
l1++;
} else {
int k2;
if (flag)
k2 = j2 * 2 + j1 + i2;
else
k2 = j1 + j2;
return k2;
}
}
return j1;
}
private void endTouch(float f) {
if (mVelocityTracker != null) {
mVelocityTracker.recycle();
mVelocityTracker = null;
}
removeCallbacks(mLongPressRunnable);
if (mDynamicsRunnable == null) {
mDynamicsRunnable = new Runnable() {
public void run() {
if (mDynamics == null)
return;
View view = getChildAt(0);
int i = getChildLeft(view);
int j = mListLeftOffset;
int k = i - j;
mListLeftStart = k;
long l1 = AnimationUtils.currentAnimationTimeMillis();
mDynamics.update(l1);
int j1 = (int) mDynamics.getPosition();
int k1 = mListLeftStart;
int i2 = j1 - k1;
scrollList(i2);
if (mDynamics.isAtRest(0.5F, 0.4F)) {
return;
} else {
postDelayed(this, 16L);
return;
}
}
};
}
if (mDynamics != null) {
float f1 = mListLeft;
long l = AnimationUtils.currentAnimationTimeMillis();
mDynamics.setState(f1, f, l);
post(mDynamicsRunnable);
}
mTouchState = 0;
}
private void fillList(int i) {
// Log.i("HorizontalListView","--------fillList i-------- " + i);
int j = getChildCount() - 1;
// Log.i("HorizontalListView","--------fillList j-------- " + j);
View view = getChildAt(j);
int k = getChildRight(view);
// Log.i("HorizontalListView","--------fillList k-------- " + k);
fillListRight(k, i);
View view1 = getChildAt(0);
int l = getChildLeft(view1);
// Log.i("HorizontalListView","--------fillList l-------- " + l);
fillListLeft(l, i);
}
private void fillListLeft(int i, int j) {
do {
// Log.i("HorizontalListView",
// "!!!!!!!!!!!!!!!!!fillListLeft i,j,mFirstItemPosition $$$$$$$$$$$$$$$$ " + i + "," + j + "," + mFirstItemPosition);
if (i + j <= 0)
return;
if (mFirstItemPosition <= 0)
return;
mFirstItemPosition--;
View view = getCachedView();
View view1 = mAdapter.getView(mFirstItemPosition, view, this);
addAndMeasureChild(view1, 1);
int i1 = getChildWidth(view1);
i -= i1;
mListLeftOffset = mListLeftOffset - i1;
} while (true);
}
private void fillListRight(int i, int j) {
/* Log.i("HorizontalListView",
"$$$$$$$$$$$$$$ i, j $$$$$$$$$$$$$$$$ " + i + "," + j);
*/ do {
View view1;
int i2;
do {
/* Log.i("HorizontalListView",
"$$$$$$$$$$$$$$fillListRight$$$$$$$$$$$$$$$$");
*/ int k = i + j;
int l = getWidth();
if (k >= l) {
/* Log.i("HorizontalListView",
"$$$$$$$$$$$$$$fillListRight k >= l $$$$$$$$$$$$$$$$");*/
return;
}
int i1 = mLastItemPosition;
int j1 = mAdapter.getCount() - 1;
if (i1 >= j1) {
/* Log.i("HorizontalListView",
"$$$$$$$$$$$$$$fillListRight i1 >= j1 $$$$$$$$$$$$$$$$");*/
return;
}
int k1 = mLastItemPosition + 1;
mLastItemPosition = k1;
int l1 = mLastItemPosition;
View view = getCachedView();
view1 = mAdapter.getView(l1, view, this);
//Log.i("HorizontalListView", "!!!!!!!!!!!!!!!! view.getTag(R.id.key_objects) " + view1.getTag(R.id.key_objects));
addAndMeasureChild(view1, 0);
i2 = getChildWidth(view1);
i += i2;
/* Log.i("HorizontalListView",
"$$$$$$$$$$$$$$ fillListRight while (i + j >= 0); $$$$$$$$$$$$$$$$");*/
} while (i + j >= 0);
removeViewInLayout(view1);
if (shouldCacheView(mLastItemPosition))
mCachedItemViews.addLast(view1);
mFirstItemPosition = mFirstItemPosition + 1;
mListLeftOffset = mListLeftOffset + i2;
} while (true);
}
private View getCachedView() {
View view;
if (mCachedItemViews.size() != 0)
view = (View) mCachedItemViews.removeFirst();
else
view = null;
return view;
}
private int getChildLeft(View view) {
int i = view.getLeft();
int j = getChildMargin(view);
return i - j;
}
private int getChildMargin(View view) {
return mItemSpacing / 2;
}
private int getChildRight(View view) {
int i = view.getRight();
int j = getChildMargin(view);
return i + j;
}
private int getChildWidth(View view) {
int i = view.getMeasuredWidth();
int j = getChildMargin(view) * 2;
return i + j;
}
private int getContainingChildIndex(int i, int j) {
int k;
if (mRect == null) {
Rect rect = new Rect();
mRect = rect;
}
k = 0;
int l = getChildCount();
while (true) {
if (k >= l) {
break;
}
View view = getChildAt(k);
view.getHitRect(mRect);
if (!mRect.contains(i, j)) {
k++;
} else {
return k;
}
}
return -1;
/*
* _L3: int l = getChildCount(); if(k >= l) break
* MISSING_BLOCK_LABEL_85; View view = getChildAt(k); Rect rect1 =
* mRect; view.getHitRect(rect1); if(!mRect.contains(i, j)) goto _L2;
* else goto _L1 _L1: int i1 = k; _L4: return i1; _L2: k++; goto _L3 i1
* = -1; goto _L4
*/
// return 0;
}
private void longClickChild(int i) {
View view = getChildAt(i);
int j = mFirstItemPosition + i;
long l = mAdapter.getItemId(j);
android.widget.AdapterView.OnItemLongClickListener onitemlongclicklistener = getOnItemLongClickListener();
if (onitemlongclicklistener == null) {
return;
} else {
HorizontalListView horizontallistview = this;
onitemlongclicklistener.onItemLongClick(
horizontallistview, view, j, l);
return;
}
}
private void positionItems() {
int i = getPaddingLeft();
int j = mListLeft;
int k = i + j;
int l = mListLeftOffset;
int i1 = k + l;
int i2 = getHeight();
int i3 = getChildCount();
int i4 = 0;
while(i4 < i3){
View view = getChildAt(i4);
int i5 = view.getMeasuredWidth();
int i6 = view.getMeasuredHeight();
int i7 = (i2 - i6) / 2;
int i8 = getChildMargin(view);
int i9 = i1 + i8;
int i10 = i9 + i5;
int i11 = i7 + i6;
view.layout(i9, i7, i10, i11);
int i12 = i8 * 2 + i5;
i1 += i12;
i4 += 1;
}
ListAdapter localListAdapter = this.mAdapter;
int i13 = this.mFirstItemPosition;
long l1 = localListAdapter.getItemId(i13);
this.mFirstItemId = l1;
}
private void removeFixedViewInfo(View view, ArrayList arraylist) {
int i = arraylist.size();
int j = 0;
do {
if (j >= i)
return;
if (((FixedViewInfo) arraylist.get(j)).view == view) {
Object obj = arraylist.remove(j);
return;
}
j++;
} while (true);
}
private void removeNonVisibleViews(int i) {
int j = getChildCount();
int k = mLastItemPosition;
int l = mAdapter.getCount() - 1;
if (k != l && j > 1) {
for (View view = getChildAt(0); view != null
&& getChildRight(view) + i < 0;) {
removeViewInLayout(view);
j--;
int i1 = mFirstItemPosition;
if (shouldCacheView(i1))
mCachedItemViews.addLast(view);
int j1 = mFirstItemPosition + 1;
mFirstItemPosition = j1;
int k1 = mListLeftOffset;
int l1 = getChildWidth(view);
int i2 = k1 + l1;
mListLeftOffset = i2;
if (j > 1)
view = getChildAt(0);
else
view = null;
}
}
if (mFirstItemPosition == 0)
return;
if (j <= 1)
return;
int j2 = j - 1;
View view1 = getChildAt(j2);
do {
if (view1 == null)
return;
int k2 = getChildLeft(view1) + i;
int l2 = getWidth();
if (k2 <= l2)
return;
removeViewInLayout(view1);
j--;
int i3 = mLastItemPosition;
if (shouldCacheView(i3))
mCachedItemViews.addLast(view1);
int j3 = mLastItemPosition - 1;
mLastItemPosition = j3;
if (j > 1) {
int k3 = j - 1;
view1 = getChildAt(k3);
} else {
view1 = null;
}
} while (true);
}
private void scrollList(int i) {
int j = mListLeftStart + i;
mListLeft = j;
setSnapPoint();
requestLayout();
}
private void setSnapPoint() {
int i = getChildCount() - 1;
int j = getWidth();
if (mLastSnapPos != 0x80000000)
return;
int k = mLastItemPosition;
int l = mAdapter.getCount() - 1;
if (k != l)
return;
View view = getChildAt(i);
if (getChildRight(view) >= j) {
return;
} else {
int i1 = computeLeftRight(i, true);
int j1 = mListLeft;
int k1 = getPaddingRight();
int l1 = j - k1 - i1;
int i2 = j1 + l1;
mLastSnapPos = i2;
Dynamics dynamics = mDynamics;
float f = mLastSnapPos;
dynamics.setMinPosition(f);
return;
}
}
private boolean shouldCacheView(int i) {
boolean flag;
if (mAdapter.getItemViewType(i) != -1)
flag = true;
else
flag = false;
return flag;
}
private void startLongPressCheck() {
if (mLongPressRunnable == null) {
mLongPressRunnable = new Runnable() {
public void run() {
if (mTouchState != 1)
return;
HorizontalListView horizontallistview = HorizontalListView.this;
int k = horizontallistview.getContainingChildIndex(mTouchStartX, mTouchStartY);
if (k == -1) {
return;
} else {
longClickChild(k);
return;
}
}
};
}
long l = ViewConfiguration.getLongPressTimeout();
postDelayed(mLongPressRunnable, l);
}
private boolean startScrollIfNeeded(MotionEvent motionevent) {
int i;
int j;
int k;
i = (int) motionevent.getX();
j = (int) motionevent.getY();
k = mTouchStartX - 10;
if (i < k) {
removeCallbacks(mLongPressRunnable);
mTouchState = 2;
return true;
} else {
int l = mTouchStartX + 10;
if (i > l) {
removeCallbacks(mLongPressRunnable);
mTouchState = 2;
return true;
} else {
int i1 = mTouchStartY - 10;
if (j < i1) {
removeCallbacks(mLongPressRunnable);
mTouchState = 2;
return true;
} else {
int j1 = mTouchStartY + 10;
if (j <= j1) {
return false;
} else {
removeCallbacks(mLongPressRunnable);
mTouchState = 2;
return true;
}
}
}
}
/*
* if(i < k) goto _L2; else goto _L1 _L1: int l = mTouchStartX + 10;
* if(i > l) goto _L2; else goto _L3 _L3: int i1 = mTouchStartY - 10;
* if(j < i1) goto _L2; else goto _L4 _L4: int j1 = mTouchStartY + 10;
* if(j <= j1) goto _L5; else goto _L2 _L2: boolean flag1; Runnable
* runnable = mLongPressRunnable; boolean flag =
* removeCallbacks(runnable); mTouchState = 2; flag1 = true; _L7: return
* flag1; _L5: flag1 = false; if(true) goto _L7; else goto _L6 _L6:
*/
// return true;
}
private void startTouch(MotionEvent motionevent) {
removeCallbacks(mDynamicsRunnable);
mTouchStartX = (int) motionevent.getX();
mTouchStartY = (int) motionevent.getY();
View view = getChildAt(0);
if (view == null) {
return;
} else {
int k = getChildLeft(view);
int l = mListLeftOffset;
mListLeftStart = k - l;
startLongPressCheck();
mVelocityTracker = VelocityTracker.obtain();
mVelocityTracker.addMovement(motionevent);
mTouchState = 1;
return;
}
}
public void addFooterView(View view) {
addFooterView(view, null, true);
}
public void addFooterView(View view, Object obj, boolean flag) {
Log.i(LOG_TAG, "addFooterView method");
FixedViewInfo fixedviewinfo = new FixedViewInfo();
fixedviewinfo.view = view;
fixedviewinfo.data = obj;
fixedviewinfo.isSelectable = flag;
mFooterViewInfos.add(fixedviewinfo);
mFooterViewSet.add(view);
if (mDataSetObserver == null) {
return;
} else {
mDataSetObserver.onChanged();
return;
}
}
@Override
protected boolean drawChild(Canvas canvas, View view, long l) {
android.graphics.Bitmap bitmap = view.getDrawingCache();
boolean flag;
if (bitmap == null) {
flag = super.drawChild(canvas, view, l);
} else {
if (mPaint == null) {
Paint paint = new Paint();
mPaint = paint;
mPaint.setAntiAlias(true);
mPaint.setFilterBitmap(true);
}
if (mChildTransformation == null) {
Transformation transformation = new Transformation();
mChildTransformation = transformation;
}
int i = canvas.save();
Object obj = null;
boolean hasObject = false;
Transformation transformation1 = mChildTransformation;
if (getChildStaticTransformation(view, transformation1)) {
int j = mChildTransformation.getTransformationType();
int k = Transformation.TYPE_IDENTITY;
if (j != k){
obj = mChildTransformation;
hasObject = true;
}else{
obj = null;
hasObject = false;
}
if ((Transformation.TYPE_MATRIX & j) != 0){
hasObject = true;
}
else{
hasObject = false;
}
}
float f;
float f1;
float f2;
Paint paint1;
android.graphics.Matrix matrix;
int i1;
Paint paint2;
f = view.getLeft();
f1 = view.getTop();
canvas.translate(f, f1);
f2 = 1F;
if (obj != null) {
if(hasObject)
{
matrix = ((Transformation) (obj)).getMatrix();
canvas.concat(matrix);
}
f2 = ((Transformation) (obj)).getAlpha();
}
if (f2 < 1F) {
paint1 = mPaint;
i1 = (int) (255F * f2);
paint1.setAlpha(i1);
}
paint2 = mPaint;
canvas.drawBitmap(bitmap, 0F, 0F, paint2);
canvas.restoreToCount(i);
flag = false;
}
return flag;
}
void findSyncPosition() {
ListAdapter listadapter = mAdapter;
int i = mFirstItemPosition;
long l = listadapter.getItemId(i);
long l1 = mFirstItemId;
if (l == l1) {
return;
} else {
mListLeft = 0;
return;
}
}
@Override
protected LayoutParams generateDefaultLayoutParams() {
return new LayoutParams(-1, -1);
}
@Override
public Adapter getAdapter() {
return getAdapter();
}
public ListAdapter getListAdapter() {
return mAdapter;
}
public int getFirstVisiblePosition() {
return mFirstItemPosition;
}
public int getLastVisiblePosition() {
return mLastItemPosition;
}
public View getSelectedView() {
throw new UnsupportedOperationException("Not supported");
}
public int getSpacing() {
return mItemSpacing;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent motionevent) {
Log.i(LOG_TAG, "onInterceptTouchEvent");
Log.i("HorizontalListView", "-------onInterceptTouchEvent---------- " + this + "," + motionevent);
int i = motionevent.getAction();
if (i == MotionEvent.ACTION_UP) {
endTouch(0F);
return false;
}
if (i == MotionEvent.ACTION_DOWN) {
startTouch(motionevent);
return false;
}
if (i == MotionEvent.ACTION_MOVE) {
return startScrollIfNeeded(motionevent);
}
/*
* motionevent.getAction(); JVM INSTR tableswitch 0 2: default 32 // 0
* 43 // 1 32 // 2 53; goto _L1 _L2 _L1 _L3 _L1: boolean flag;
* endTouch(0F); flag = false; _L5: return flag; _L2:
* startTouch(motionevent); flag = false; continue; Loop/switch isn't
* completed _L3: flag = startScrollIfNeeded(motionevent); if(true) goto
* _L5; else goto _L4 _L4:
*/
return true;
}
@Override
protected void onLayout(boolean flag, int i, int j, int k, int l) {
super.onLayout(flag, i, j, k, l);
//Log.i("HorizontalListView", "---flag, i, j, k, l" + flag + "," + i + "," + j + "," + k + "," + l);
if (mAdapter == null)
return;
if (getChildCount() == 0) {
mLastItemPosition = -1;
fillListRight(mListLeft, 0);
} else {
int l1 = mListLeft + mListLeftOffset;
View view = getChildAt(0);
int i2 = getChildLeft(view);
int j2 = l1 - i2;
removeNonVisibleViews(j2);
fillList(j2);
}
positionItems();
invalidate();
}
@Override
protected void onMeasure(int i, int j) {
super.onMeasure(i, j);
mWidthMeasureSpec = i;
mHeightMeasureSpec = j;
}
@Override
public boolean onTouchEvent(MotionEvent motionevent) {
if(getChildCount() == 0){
return false;
}
int i = motionevent.getAction();
if(i == MotionEvent.ACTION_DOWN){
startTouch(motionevent);
}else if (i == MotionEvent.ACTION_UP){
if(this.mTouchState == 1){
int l = (int)motionevent.getX();
int i1 = (int)motionevent.getY();
clickChildAt(l, i1);
}else if (this.mTouchState == 2){
float f = 0.0F;
this.mVelocityTracker.addMovement(motionevent);
this.mVelocityTracker.computeCurrentVelocity(1000);
f = this.mVelocityTracker.getXVelocity();
endTouch(f);
}
}else if (i == MotionEvent.ACTION_MOVE){
if(this.mTouchState == 1){
startScrollIfNeeded(motionevent);
}else if (this.mTouchState == 2){
this.mVelocityTracker.addMovement(motionevent);
int j = (int)motionevent.getX();
int k = this.mTouchStartX;
int l = j - k;
scrollList(l);
}
}else{
//nothing to do here
}
return true;
}
public boolean removeFooterView(View view) {
boolean flag2;
if (mFooterViewInfos.size() > 0) {
boolean flag = false;
if (((HeaderViewListAdapter) mAdapter).removeFooter(view)) {
mDataSetObserver.onChanged();
flag = true;
}
ArrayList arraylist = mFooterViewInfos;
removeFixedViewInfo(view, arraylist);
boolean flag1 = mFooterViewSet.remove(view);
flag2 = flag;
} else {
flag2 = false;
}
return flag2;
}
public void setAdapter(Adapter adapter) {
ListAdapter listadapter = (ListAdapter) adapter;
setAdapter(listadapter);
}
public void setAdapter(ListAdapter listadapter) {
if (mAdapter != null) {
mAdapter.unregisterDataSetObserver(mDataSetObserver);
}
if (mFooterViewInfos.size() > 0) {
mAdapter = new HeaderViewListAdapter(null, mFooterViewInfos,
listadapter);
Log.i("HorizontalListView", "-------HeaderViewListAdapter----- " + listadapter.getClass().getCanonicalName());
} else {
mAdapter = listadapter;
Log.i("HorizontalListView", "-------listadapter----- " + listadapter.getClass().getCanonicalName());
}
removeAllViewsInLayout();
requestLayout();
if (mDataSetObserver == null) {
mDataSetObserver = new DataSetObserver() {
@Override
public void onChanged() {
Log.i(LOG_TAG, "mDataSetObserver.onChanged method");
int i = getChildCount();
for (int j = 0; j < i; j++) {
View view = getChildAt(j);
if (!mFooterViewSet.contains(view))
mCachedItemViews.addLast(view);
}
removeAllViewsInLayout();
findSyncPosition();
int k = mFirstItemPosition = 0;
int l = mLastItemPosition = 0;
int i1 = mListLeftOffset = 0;
int j1 = mLastSnapPos = 0x80000000;
if (mDynamics != null)
mDynamics.setMinPosition(-3.402823E+038F);
HorizontalListView horizontallistview = HorizontalListView.this;
Runnable runnable = mDynamicsRunnable;
boolean flag = horizontallistview.removeCallbacks(runnable);
requestLayout();
}
/*
* final HorizontalListView this$0;
*
*
* { this$0 = HorizontalListView.this; super(); }
*/
};
}
mAdapter.registerDataSetObserver(mDataSetObserver);
}
public void setDynamics(Dynamics dynamics) {
if (mDynamics != null) {
float f = mDynamics.getPosition();
float f1 = mDynamics.getVelocity();
long l = AnimationUtils.currentAnimationTimeMillis();
dynamics.setState(f, f1, l);
}
mDynamics = dynamics;
mDynamics.setMaxPosition(0F);
}
public void setSelection(int i) {
throw new UnsupportedOperationException("Not supported");
}
public void setSpacing(int i) {
mItemSpacing = i;
}
private static final int INVALID_INDEX = 255;
private static final int LAYOUT_MODE_LEFT = 1;
private static final int LAYOUT_MODE_RIGHT = 0;
private static final String LOG_TAG = "HListView2";
private static final int PIXELS_PER_SECOND = 1000;
private static final float POSITION_TOLERANCE = 0.4F;
private static final int TOUCH_SCROLL_THRESHOLD = 10;
private static final int TOUCH_STATE_CLICK = 1;
private static final int TOUCH_STATE_RESTING = 0;
private static final int TOUCH_STATE_SCROLL = 2;
private static final float VELOCITY_TOLERANCE = 0.5F;
private ListAdapter mAdapter;
private final LinkedList mCachedItemViews;
private Transformation mChildTransformation;
private DataSetObserver mDataSetObserver;
private Dynamics mDynamics;
private Runnable mDynamicsRunnable;
private long mFirstItemId;
private int mFirstItemPosition;
private ArrayList mFooterViewInfos;
private HashSet mFooterViewSet;
private int mHeightMeasureSpec;
private int mItemSpacing;
private int mLastItemPosition;
private int mLastSnapPos;
private int mListLeft;
private int mListLeftOffset;
private int mListLeftStart;
private Runnable mLongPressRunnable;
private Paint mPaint;
private Rect mRect;
private int mTouchStartX;
private int mTouchStartY;
private int mTouchState;
private VelocityTracker mVelocityTracker;
private int mWidthMeasureSpec;
}