package com.ladjzero.uzlee;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.ladjzero.hipda.Forum;
import com.ladjzero.hipda.User;
import com.ladjzero.uzlee.utils.Utils;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.Predicate;
import java.util.ArrayList;
import java.util.List;
import butterknife.Bind;
import butterknife.ButterKnife;
public class FragmentThreadsPager extends Fragment implements FragmentThreadsAbs.OnScrollUpOrDown, ActivityBase.OnToolbarClickListener {
@Bind(R.id.pager)
ViewPager mViewPager;
private MyFragmentPagerAdapter mPagerAdapter;
private ActivityMain mActivity;
private boolean mTabsContainerVisible = true;
private boolean mLockAnimation = false;
private List<ViewPager.OnPageChangeListener> mOnPageChangeListeners;
private OnCreatedListener mOnCreatedListener;
private List<Forum> mForums;
public static FragmentThreadsPager newInstance(Bundle bundle) {
FragmentThreadsPager fragment = new FragmentThreadsPager();
fragment.mOnPageChangeListeners = new ArrayList<>();
return fragment;
}
public void setOnCreatedListener(OnCreatedListener l) {
mOnCreatedListener = l;
}
public void setOnPageChangeListener(OnPageChangeListener l) {
mPagerAdapter.setOnPageChangeListener(l);
}
public FragmentThreadsAbs getCurrentFragment() {
return mPagerAdapter.getCurrentFragment();
}
public Forum getCurrentForum() {
return mPagerAdapter.getCurrentForum();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.full_view_pager, container, false);
ButterKnife.bind(this, rootView);
mActivity = (ActivityMain) getActivity();
mForums = Utils.getUserSelectedForums(mActivity);
mPagerAdapter = new MyFragmentPagerAdapter(getChildFragmentManager(), mForums);
mViewPager.setAdapter(mPagerAdapter);
mActivity.getPageIndicator().setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
private final int POSITION_NOT_READY = -10;
private int mCurrentPosition = POSITION_NOT_READY;
private int mState = ViewPager.SCROLL_STATE_IDLE;
private boolean mChanged = false;
private int mLastPosition;
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if (mOnPageChangeListeners != null) {
for (ViewPager.OnPageChangeListener l : mOnPageChangeListeners) {
l.onPageScrolled(position, positionOffset, positionOffsetPixels);
}
}
// Skip initial state.
if (mState == ViewPager.SCROLL_STATE_IDLE) return;
// Record the position when begin to drag.
if (mState == ViewPager.SCROLL_STATE_DRAGGING && mCurrentPosition == POSITION_NOT_READY) {
mCurrentPosition = mLastPosition;
}
}
@Override
public void onPageSelected(int position) {
if (mOnPageChangeListeners != null) {
for (ViewPager.OnPageChangeListener l : mOnPageChangeListeners) {
l.onPageSelected(position);
}
}
mChanged = true;
mLastPosition = position;
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
if (mOnCreatedListener != null) mOnCreatedListener.onCreated(mViewPager);
return rootView;
}
@Override
public void onUp(int ms) {
if (mTabsContainerVisible || mLockAnimation) return;
}
@Override
public void onDown(int ms) {
if (!mTabsContainerVisible || mLockAnimation) return;
}
@Override
public void toolbarClick() {
mPagerAdapter.getCurrentFragment().toolbarClick();
}
public interface OnCreatedListener {
void onCreated(ViewPager viewPager);
}
public interface OnPageChangeListener {
void onPageChange(FragmentThreadsAbs f);
}
public static class MyFragmentPagerAdapter extends FragmentPagerAdapter {
private FragmentThreadsAbs mFragment;
private List<Forum> mForums;
private OnPageChangeListener mOnPageChangeListener;
public MyFragmentPagerAdapter(FragmentManager fm, List<Forum> forums) {
super(fm);
mForums = forums;
}
public void setOnPageChangeListener(OnPageChangeListener l) {
mOnPageChangeListener = l;
}
@Override
public int getCount() {
int count = mForums.size();
return count;
}
@Override
public CharSequence getPageTitle(int position) {
int fid = mForums.get(position).getFid();
String title = Forum.findById(mForums, fid).toString();
return title;
}
@Override
public Fragment getItem(int position) {
int fid = mForums.get(position).getFid();
Bundle args = new Bundle();
args.putInt("fid", fid);
args.putBoolean("enablePullToRefresh", true);
FragmentThreadsAbs fragment = FragmentNormalThreads.newInstance();
fragment.setArguments(args);
return fragment;
}
@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
if (getCurrentFragment() != object) {
mFragment = ((FragmentThreadsAbs) object);
if (mOnPageChangeListener != null) mOnPageChangeListener.onPageChange(mFragment);
}
super.setPrimaryItem(container, position, object);
}
public FragmentThreadsAbs getCurrentFragment() {
return mFragment;
}
public Forum getCurrentForum() {
if (mFragment != null) {
return (Forum) CollectionUtils.find(mForums, new Predicate() {
int fid = mFragment.getArguments().getInt("fid");
@Override
public boolean evaluate(Object o) {
return fid == ((Forum) o).getFid();
}
});
} else {
return null;
}
}
}
}