package com.wangdaye.mysplash.photo.view.holder;
import android.annotation.SuppressLint;
import android.support.annotation.Nullable;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.pixelcan.inkpageindicator.InkPageIndicator;
import com.wangdaye.mysplash.R;
import com.wangdaye.mysplash.common.data.entity.unsplash.Photo;
import com.wangdaye.mysplash.common._basic.MysplashActivity;
import com.wangdaye.mysplash.common.ui.adapter.MyPagerAdapter;
import com.wangdaye.mysplash.common.ui.adapter.PhotoInfoAdapter;
import com.wangdaye.mysplash.common.utils.DisplayUtils;
import com.wangdaye.mysplash.common.utils.helper.ImageHelper;
import com.wangdaye.mysplash.common.utils.helper.IntentHelper;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
/**
* More holder.
*
* This view holder is used to show related photos and collections information.
*
* */
public class MoreHolder extends PhotoInfoAdapter.ViewHolder
implements ViewPager.OnPageChangeListener {
@BindView(R.id.item_photo_more_viewPager)
ViewPager viewPager;
@BindView(R.id.item_photo_more_indicator)
InkPageIndicator indicator;
private ImageView[] covers;
private TextView[] titles;
private MoreHolderModel model;
public static final int TYPE_MORE = 7;
public static class MoreHolderModel {
int position;
int totalPage;
Boolean[] hasFadedIn;
MoreHolderModel(Photo photo) {
position = 0;
totalPage = photo.related_collections.results.size();
hasFadedIn = new Boolean[totalPage];
for (int i = 0; i < hasFadedIn.length; i ++) {
hasFadedIn[i] = false;
}
}
}
public MoreHolder(View itemView, Photo photo, @Nullable MoreHolderModel model) {
super(itemView);
ButterKnife.bind(this, itemView);
if (model == null) {
model = new MoreHolderModel(photo);
}
this.model = model;
this.covers = new ImageView[model.totalPage];
this.titles = new TextView[model.totalPage];
}
@SuppressLint("InflateParams")
@Override
protected void onBindView(final MysplashActivity a, final Photo photo) {
int size = photo.related_collections.results.size();
List<View> viewList = new ArrayList<>(size);
List<String> titleList = new ArrayList<>(size);
for (int i = 0; i < size; i ++) {
final int finalI = i;
View view = LayoutInflater.from(a).inflate(R.layout.item_photo_more_page_vertical, null);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
IntentHelper.startCollectionActivity(
a, photo.related_collections.results.get(finalI));
}
});
covers[i] = ButterKnife.findById(view, R.id.item_photo_more_page_vertical_cover);
ImageHelper.OnLoadImageListener listener = new ImageHelper.OnLoadImageListener() {
@Override
public void onLoadSucceed() {
if (!model.hasFadedIn[finalI]) {
model.hasFadedIn[finalI] = true;
ImageHelper.startSaturationAnimation(a, covers[finalI]);
}
}
@Override
public void onLoadFailed() {
// do nothing.
}
};
ImageHelper.loadCollectionCover(
a,
covers[i],
photo.related_collections.results.get(0),
model.hasFadedIn[i] ? null : listener);
titles[i] = ButterKnife.findById(view, R.id.item_photo_more_page_vertical_title);
titles[i].setText(photo.related_collections.results.get(i).title.toUpperCase());
viewList.add(view);
}
viewPager.setAdapter(new MyPagerAdapter(viewList, titleList));
viewPager.setCurrentItem(model.position);
viewPager.setTranslationY(
(float) (a.getResources()
.getDimensionPixelSize(R.dimen.item_photo_more_vertical_height) * (-0.5)));
viewPager.clearOnPageChangeListeners();
viewPager.addOnPageChangeListener(this);
indicator.setViewPager(viewPager);
}
@Override
protected void onRecycled() {
for (ImageView i : covers) {
ImageHelper.releaseImageView(i);
}
}
public MoreHolderModel saveModel() {
return model;
}
public ViewPager getViewPager() {
return viewPager;
}
// interface.
// on page change listener.
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
// do nothing.
}
@Override
public void onPageSelected(int position) {
model.position = position;
}
@Override
public void onPageScrollStateChanged(int state) {
// do nothing.
}
}