package com.merono.g;
import android.animation.Animator;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.view.MotionEvent;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
import java.util.ArrayList;
public class BoardFragment extends ListFragment implements View.OnTouchListener {
private ArrayList<String> threadLinks = new ArrayList<String>(15);
private ArrayList<Post> posts = new ArrayList<Post>(15);
private PostAdapter adapter;
// variables for onTouch
private static final int SWIPE_DURATION = 300;
private boolean mSwiping = false;
private boolean mIsImagePress;
private FrameLayout imageFrameLayout;
private float mDownX;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
adapter = new PostAdapter(getActivity(), R.layout.post_item, posts, this);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setListAdapter(adapter);
}
public void setData(ArrayList<Post> data, ArrayList<String> links) {
posts.clear();
posts.addAll(data);
threadLinks.clear();
threadLinks.addAll(links);
if (adapter != null) {
adapter.notifyDataSetChanged();
}
}
public static boolean isImagePress(View v, MotionEvent ev) {
ImageView imageView = (ImageView) v.findViewById(R.id.post_img);
int imgWidth = imageView.getWidth();
return ev.getX() < imgWidth;
}
private void completeClick(View v, MotionEvent ev) {
int position = getListView().getPositionForView(v);
if (isImagePress(v, ev)) {
Post selected = posts.get(position);
if (selected.hasFullImgUrl()) {
String imgUrl = selected.getFullImgUrl();
ImageWebViewFragment.openImageWebView(getActivity(), imgUrl);
}
} else if (threadLinks.get(position) != null) {
Intent i = new Intent(getActivity(), ThreadActivity.class);
i.putExtra("URL", threadLinks.get(position));
startActivity(i);
}
}
@Override
public boolean onTouch(final View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (mSwiping) {
return false;
}
mDownX = event.getX();
mIsImagePress = isImagePress(v, event);
if (mIsImagePress) {
imageFrameLayout = (FrameLayout) v.findViewById(R.id.post_img_frame);
imageFrameLayout.setForeground(getResources().getDrawable(R.color.image_foreground));
} else {
v.setBackgroundResource(android.R.color.holo_blue_dark);
}
break;
case MotionEvent.ACTION_CANCEL:
v.setAlpha(1);
v.setTranslationX(0);
mSwiping = false;
if (mIsImagePress) {
imageFrameLayout.setForeground(null);
} else {
v.setBackgroundResource(0);
}
break;
case MotionEvent.ACTION_MOVE:
float x = event.getX() + v.getTranslationX();
float deltaX = x - mDownX;
float deltaXAbs = Math.abs(deltaX);
if (!mSwiping) {
if (deltaXAbs > 40) {
mSwiping = true;
getListView().requestDisallowInterceptTouchEvent(true);
}
} else {
v.setTranslationX(x - mDownX);
v.setAlpha(1 - deltaXAbs / v.getWidth());
}
break;
case MotionEvent.ACTION_UP:
if (mSwiping) {
x = event.getX() + v.getTranslationX();
deltaX = x - mDownX;
deltaXAbs = Math.abs(deltaX);
float fractionCovered;
float endX;
float endAlpha;
final boolean remove;
if (deltaXAbs > v.getWidth() / 4) {
fractionCovered = deltaXAbs / v.getWidth();
endX = (deltaX < 0) ? -v.getWidth() : v.getWidth();
endAlpha = 0;
remove = true;
} else {
fractionCovered = 1 - (deltaXAbs / v.getWidth());
endX = 0;
endAlpha = 1;
remove = false;
}
long duration = (int) ((1 - fractionCovered) * SWIPE_DURATION);
v.animate().setDuration(duration).alpha(endAlpha).
translationX(endX).setListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animator) {
}
@Override
public void onAnimationEnd(Animator animator) {
v.setAlpha(1);
v.setTranslationX(0);
if (remove) {
int position = getListView().getPositionForView(v);
posts.remove(position);
threadLinks.remove(position);
adapter.notifyDataSetChanged();
}
mSwiping = false;
}
@Override
public void onAnimationCancel(Animator animator) {
}
@Override
public void onAnimationRepeat(Animator animator) {
}
});
} else {
completeClick(v, event);
}
if (mIsImagePress) {
imageFrameLayout.setForeground(null);
} else {
v.setBackgroundResource(0);
}
break;
default:
return false;
}
return true;
}
}