package com.wangdaye.mysplash.common.ui.adapter;
import android.content.Context;
import android.os.Build;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.wangdaye.mysplash.R;
import com.wangdaye.mysplash.common._basic.FooterAdapter;
import com.wangdaye.mysplash.common.data.entity.unsplash.User;
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.utils.manager.ThemeManager;
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;
/**
* User adapter.
*
* Adapter for {@link RecyclerView} to show users.
*
* */
public class UserAdapter extends FooterAdapter<RecyclerView.ViewHolder> {
private Context a;
private List<User> itemList;
class ViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.item_user_background)
RelativeLayout background;
@BindView(R.id.item_user_avatar)
CircleImageView avatar;
@BindView(R.id.item_user_portfolio)
ImageButton portfolioBtn;
@BindView(R.id.item_user_title)
TextView title;
@BindView(R.id.item_user_subtitle)
TextView subtitle;
ViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
DisplayUtils.setTypeface(itemView.getContext(), subtitle);
}
void onBindView(final int position) {
title.setText(itemList.get(position).name);
if (TextUtils.isEmpty(itemList.get(position).bio)) {
subtitle.setText(
itemList.get(position).total_photos
+ " " + a.getResources().getStringArray(R.array.user_tabs)[0] + ", "
+ itemList.get(position).total_collections
+ " " + a.getResources().getStringArray(R.array.user_tabs)[1] + ", "
+ itemList.get(position).total_likes
+ " " + a.getResources().getStringArray(R.array.user_tabs)[2]);
} else {
subtitle.setText(itemList.get(position).bio);
}
if (TextUtils.isEmpty(itemList.get(position).portfolio_url)) {
portfolioBtn.setVisibility(View.GONE);
} else {
portfolioBtn.setVisibility(View.VISIBLE);
}
ThemeManager.setImageResource(
portfolioBtn, R.drawable.ic_item_earth_light, R.drawable.ic_item_earth_dark);
ImageHelper.loadAvatar(a, avatar, itemList.get(position), new ImageHelper.OnLoadImageListener() {
@Override
public void onLoadSucceed() {
if (!itemList.get(position).hasFadedIn) {
itemList.get(position).hasFadedIn = true;
ImageHelper.startSaturationAnimation(a, avatar);
}
}
@Override
public void onLoadFailed() {
// do nothing.
}
});
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
avatar.setTransitionName(itemList.get(position).username + "-avatar");
background.setTransitionName(itemList.get(position).username + "-background");
}
}
void onRecycled() {
ImageHelper.releaseImageView(avatar);
}
// interface.
@OnClick(R.id.item_user_background) void clickItem() {
if (a instanceof MysplashActivity) {
IntentHelper.startUserActivity(
(MysplashActivity) a,
avatar,
itemList.get(getAdapterPosition()),
UserActivity.PAGE_PHOTO);
}
}
@OnClick(R.id.item_user_portfolio) void checkPortfolioWebPage() {
if (!TextUtils.isEmpty(itemList.get(getAdapterPosition()).portfolio_url)) {
IntentHelper.startWebActivity(a, itemList.get(getAdapterPosition()).portfolio_url);
}
}
}
public UserAdapter(Context a, List<User> list) {
this.a = a;
this.itemList = list;
}
@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_user, parent, false);
return new ViewHolder(v);
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof ViewHolder) {
((ViewHolder) holder).onBindView(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(User u, int position) {
if (position <= itemList.size()) {
itemList.add(position, u);
notifyItemInserted(position);
}
}
public void clearItem() {
itemList.clear();
notifyDataSetChanged();
}
public void updateUser(User u, boolean probablyRepeat, boolean refreshView) {
for (int i = 0; i < getRealItemCount(); i ++) {
if (itemList.get(i).id.equals(u.id)) {
u.hasFadedIn = itemList.get(i).hasFadedIn;
itemList.set(i, u);
if (refreshView) {
notifyItemChanged(i);
}
if (!probablyRepeat) {
return;
}
}
}
}
public void setUserData(List<User> list) {
itemList.clear();
itemList.addAll(list);
notifyDataSetChanged();
}
public List<User> getUserData() {
List<User> list = new ArrayList<>();
list.addAll(itemList);
return list;
}
}