package com.wangdaye.mysplash.common.ui.adapter;
import android.content.Context;
import android.support.annotation.DrawableRes;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.wangdaye.mysplash.R;
import com.wangdaye.mysplash.common.data.entity.unsplash.Collection;
import com.wangdaye.mysplash.common.data.entity.unsplash.Photo;
import com.wangdaye.mysplash.common.ui.widget.CircularProgressIcon;
import com.wangdaye.mysplash.common.utils.DisplayUtils;
import com.wangdaye.mysplash.common.utils.helper.ImageHelper;
import com.wangdaye.mysplash.common.utils.manager.AuthManager;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
/**
* Collection mini adapter.
*
* Adapter for {@link RecyclerView} to show {@link Collection} in mini style.
*
* */
public class CollectionMiniAdapter extends RecyclerView.Adapter<CollectionMiniAdapter.ViewHolder> {
// widget
private Context c;
private OnCollectionResponseListener listener;
private Photo photo;
public class ViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.item_collection_mini_image)
ImageView image;
@BindView(R.id.item_collection_mini_title)
TextView title;
@BindView(R.id.item_collection_mini_subtitle)
TextView subtitle;
@BindView(R.id.item_collection_mini_lockIcon)
ImageView lockIcon;
@BindView(R.id.item_collection_icon)
CircularProgressIcon stateIcon;
ViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
DisplayUtils.setTypeface(itemView.getContext(), subtitle);
}
void onBindView(int position) {
if (position == 0) {
image.setImageResource(R.color.colorTextSubtitle_light);
title.setText(c.getString(R.string.feedback_create_collection).toUpperCase());
subtitle.setVisibility(View.GONE);
lockIcon.setVisibility(View.GONE);
stateIcon.forceSetResultState(android.R.color.transparent);
return;
}
final Collection collection = AuthManager.getInstance()
.getCollectionsManager()
.getCollectionList()
.get(position - 1);
subtitle.setVisibility(View.VISIBLE);
lockIcon.setVisibility(View.VISIBLE);
title.setText(collection.title.toUpperCase());
int photoNum = collection.total_photos;
subtitle.setText(photoNum + " " + c.getResources().getStringArray(R.array.user_tabs)[0]);
reloadCoverImage(collection);
if (collection.privateX) {
lockIcon.setAlpha(1f);
} else {
lockIcon.setAlpha(0f);
}
if (collection.insertingPhoto) {
stateIcon.forceSetProgressState();
} else {
for (int i = 0; i < photo.current_user_collections.size(); i ++) {
if (collection.id == photo.current_user_collections.get(i).id) {
stateIcon.forceSetResultState(R.drawable.ic_item_state_succeed);
return;
}
}
stateIcon.forceSetResultState(android.R.color.transparent);
}
}
void onRecycled() {
ImageHelper.releaseImageView(image);
}
public void setProgressState() {
stateIcon.setProgressState();
}
public void setResultState(@DrawableRes int imageId) {
stateIcon.setResultState(imageId);
}
public void reloadCoverImage(final Collection collection) {
if (collection.cover_photo != null) {
ImageHelper.loadCollectionCover(c, image, collection, new ImageHelper.OnLoadImageListener() {
@Override
public void onLoadSucceed() {
if (!collection.cover_photo.hasFadedIn) {
collection.cover_photo.hasFadedIn = true;
AuthManager.getInstance()
.getCollectionsManager()
.updateCollection(collection);
ImageHelper.startSaturationAnimation(c, image);
}
}
@Override
public void onLoadFailed() {
image.setImageResource(R.color.colorTextContent_light);
}
});
} else {
image.setImageResource(R.color.colorTextContent_light);
}
}
@OnClick(R.id.item_collection_mini_card) void clickItem() {
if (getAdapterPosition() == 0 && listener != null) {
listener.onCreateCollection();
} else if (stateIcon.isUsable() && listener != null) {
Collection collection = AuthManager.getInstance()
.getCollectionsManager()
.getCollectionList()
.get(getAdapterPosition() - 1);
collection.insertingPhoto = true;
AuthManager.getInstance()
.getCollectionsManager()
.updateCollection(collection);
listener.onClickCollectionItem(
AuthManager.getInstance()
.getCollectionsManager()
.getCollectionList()
.get(getAdapterPosition() - 1).id,
getAdapterPosition());
}
}
}
public CollectionMiniAdapter(Context c, Photo p) {
this.c = c;
updatePhoto(p);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_collection_mini, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.onBindView(position);
}
@Override
public void onViewRecycled(ViewHolder holder) {
super.onViewRecycled(holder);
holder.onRecycled();
}
@Override
public int getItemCount() {
return AuthManager.getInstance()
.getCollectionsManager()
.getCollectionList()
.size() + 1;
}
@Override
public int getItemViewType(int position) {
return position;
}
public void updatePhoto(Photo p) {
this.photo = p;
}
// interface.
public interface OnCollectionResponseListener {
void onCreateCollection();
void onClickCollectionItem(int collectionId, int adapterPosition);
}
public void setOnCollectionResponseListener(OnCollectionResponseListener l) {
this.listener = l;
}
}