package cl.monsoon.s1next.view.adapter;
import android.app.Activity;
import android.content.res.Resources;
import android.support.v4.view.PagerAdapter;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import java.util.List;
import cl.monsoon.s1next.R;
import cl.monsoon.s1next.util.ViewTreeObserverUtil;
import cl.monsoon.s1next.widget.EmoticonFactory;
public final class EmoticonPagerAdapter extends PagerAdapter {
private final Activity mActivity;
private final float mEmoticonWidth;
private final int mEmoticonGridPadding;
private final EmoticonFactory mEmoticonFactory;
private final List<String> mEmoticonTypeTitles;
public EmoticonPagerAdapter(Activity activity) {
this.mActivity = activity;
Resources resources = activity.getResources();
mEmoticonWidth = resources.getDimension(R.dimen.minimum_touch_target_size);
mEmoticonGridPadding = resources.getDimensionPixelSize(R.dimen.emoticon_padding);
mEmoticonFactory = new EmoticonFactory(activity);
mEmoticonTypeTitles = mEmoticonFactory.getEmotionTypeTitles();
}
@Override
public int getCount() {
return mEmoticonTypeTitles.size();
}
@Override
public CharSequence getPageTitle(int position) {
return mEmoticonTypeTitles.get(position);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
RecyclerView recyclerView = new RecyclerView(mActivity);
recyclerView.setHasFixedSize(true);
recyclerView.setClipToPadding(false);
recyclerView.setPadding(0, mEmoticonGridPadding, 0, mEmoticonGridPadding);
GridLayoutManager gridLayoutManager = new GridLayoutManager(mActivity, 1);
recyclerView.setLayoutManager(gridLayoutManager);
RecyclerView.Adapter<EmoticonGridRecyclerAdapter.BindingViewHolder> recyclerAdapter =
new EmoticonGridRecyclerAdapter(mActivity,
mEmoticonFactory.getEmoticonsByIndex(position));
recyclerView.setAdapter(recyclerAdapter);
// auto fit grid
// forked from http://stackoverflow.com/a/27000759
recyclerView.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
ViewTreeObserverUtil.removeOnGlobalLayoutListener(
recyclerView.getViewTreeObserver(), this);
int measuredWidth = recyclerView.getMeasuredWidth();
int spanCount = (int) Math.floor(measuredWidth / mEmoticonWidth);
gridLayoutManager.setSpanCount(spanCount);
gridLayoutManager.requestLayout();
}
});
container.addView(recyclerView);
return recyclerView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
}