package com.wangdaye.mysplash.common.ui.adapter; import android.content.Context; import android.os.Build; import android.support.v7.widget.CardView; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.wangdaye.mysplash.R; import com.wangdaye.mysplash.common._basic.FooterAdapter; import com.wangdaye.mysplash.common._basic.MysplashActivity; import com.wangdaye.mysplash.common.ui.widget.CircleImageView; import com.wangdaye.mysplash.common.utils.DisplayUtils; import com.wangdaye.mysplash.common.utils.helper.ImageHelper; import com.wangdaye.mysplash.common.utils.helper.IntentHelper; import com.wangdaye.mysplash.common.data.entity.unsplash.Collection; import com.wangdaye.mysplash.common.ui.widget.freedomSizeView.FreedomImageView; import com.wangdaye.mysplash.user.view.activity.UserActivity; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; /** * Collection adapter. * * Adapter for {@link RecyclerView} to show {@link Collection}. * * */ public class CollectionAdapter extends FooterAdapter<RecyclerView.ViewHolder> { private Context a; private List<Collection> itemList; private int columnCount; class ViewHolder extends RecyclerView.ViewHolder { @BindView(R.id.item_collection) CardView card; @BindView(R.id.item_collection_cover) FreedomImageView image; @BindView(R.id.item_collection_title) TextView title; @BindView(R.id.item_collection_subtitle) TextView subtitle; @BindView(R.id.item_collection_avatar) CircleImageView avatar; @BindView(R.id.item_collection_name) TextView name; private Collection collection; ViewHolder(View itemView) { super(itemView); ButterKnife.bind(this, itemView); DisplayUtils.setTypeface(itemView.getContext(), subtitle); DisplayUtils.setTypeface(itemView.getContext(), name); } public void onBindView(final Collection collection) { this.collection = collection; ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) card.getLayoutParams(); if (columnCount > 1) { int margin = a.getResources().getDimensionPixelSize(R.dimen.normal_margin); params.setMargins(0, 0, margin, margin); card.setLayoutParams(params); card.setRadius(a.getResources().getDimensionPixelSize(R.dimen.nano_margin)); } else { params.setMargins(0, 0, 0, 0); card.setLayoutParams(params); card.setRadius(0); } if (collection.cover_photo != null && collection.cover_photo.width != 0 && collection.cover_photo.height != 0) { image.setSize( collection.cover_photo.width, collection.cover_photo.height); } title.setText(""); subtitle.setText(""); name.setText(""); image.setShowShadow(false); if (collection.cover_photo != null) { ImageHelper.loadCollectionCover(a, image, collection, new ImageHelper.OnLoadImageListener() { @Override public void onLoadSucceed() { if (!collection.cover_photo.hasFadedIn) { collection.cover_photo.hasFadedIn = true; ImageHelper.startSaturationAnimation(a, image); } title.setText(collection.title.toUpperCase()); int photoNum = collection.total_photos; subtitle.setText( photoNum + " " + a.getResources().getStringArray(R.array.user_tabs)[0]); name.setText(collection.user.name); image.setShowShadow(true); } @Override public void onLoadFailed() { title.setText(collection.title.toUpperCase()); int photoNum = collection.total_photos; subtitle.setText( photoNum + " " + a.getResources().getStringArray(R.array.user_tabs)[0]); name.setText(collection.user.name); image.setShowShadow(true); } }); card.setBackgroundColor( ImageHelper.computeCardBackgroundColor( a, collection.cover_photo.color)); } else { image.setImageResource(R.color.colorTextContent_light); } ImageHelper.loadAvatar(a, avatar, collection.user, null); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { card.setTransitionName(collection.id + "-background"); avatar.setTransitionName(collection.user.username + "-avatar"); } } public void onRecycled() { ImageHelper.releaseImageView(image); ImageHelper.releaseImageView(avatar); } // interface. @OnClick(R.id.item_collection) void clickItem() { if (a instanceof MysplashActivity) { IntentHelper.startCollectionActivity( (MysplashActivity) a, avatar, card, collection); } } @OnClick(R.id.item_collection_avatar) void checkAuthor() { if (a instanceof MysplashActivity) { IntentHelper.startUserActivity( (MysplashActivity) a, avatar, collection.user, UserActivity.PAGE_PHOTO); } } } public CollectionAdapter(Context a, List<Collection> list) { this(a, list, DisplayUtils.getGirdColumnCount(a)); } public CollectionAdapter(Context a, List<Collection> list, int columnCount) { this.a = a; this.itemList = list; this.columnCount = columnCount; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int position) { if (isFooter(position)) { // footer. return FooterHolder.buildInstance(parent); } else { View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.item_collection, parent, false); return new ViewHolder(v); } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (holder instanceof ViewHolder) { ((ViewHolder) holder).onBindView(itemList.get(position)); } } @Override public void onViewRecycled(RecyclerView.ViewHolder holder) { super.onViewRecycled(holder); if (holder instanceof ViewHolder) { ((ViewHolder) holder).onRecycled(); } } @Override public int getRealItemCount() { return itemList.size(); } @Override public int getItemViewType(int position) { return position; } @Override protected boolean hasFooter() { return DisplayUtils.getNavigationBarHeight(a.getResources()) != 0; } public void setActivity(MysplashActivity a) { this.a = a; } public void insertItem(Collection c, int position) { if (position <= itemList.size()) { itemList.add(position, c); notifyItemInserted(position); } } public void removeItem(Collection c) { for (int i = 0; i < itemList.size(); i ++) { if (itemList.get(i).id == c.id) { itemList.remove(i); notifyItemRemoved(i); return; } } } public void clearItem() { itemList.clear(); notifyDataSetChanged(); } public List<Collection> getItemList() { return itemList; } public void updateCollection(Collection c, boolean probablyRepeat, boolean refreshView) { for (int i = 0; i < getRealItemCount(); i ++) { if (itemList.get(i).id == c.id) { c.insertingPhoto = itemList.get(i).insertingPhoto; if (c.cover_photo != null && itemList.get(i).cover_photo != null) { c.cover_photo.loadPhotoSuccess = itemList.get(i).cover_photo.loadPhotoSuccess; c.cover_photo.hasFadedIn = itemList.get(i).cover_photo.hasFadedIn; c.cover_photo.settingLike = itemList.get(i).cover_photo.settingLike; } itemList.set(i, c); if (refreshView) { notifyItemChanged(i); } if (!probablyRepeat) { return; } } } } public void setCollectionData(List<Collection> list) { itemList.clear(); itemList.addAll(list); notifyDataSetChanged(); } public List<Collection> getCollectionData() { List<Collection> list = new ArrayList<>(); list.addAll(itemList); return list; } }