/*
* Copyright (c) 2016 Zhang Hai <Dreaming.in.Code.ZH@Gmail.com>
* All Rights Reserved.
*/
package me.zhanghai.android.douya.profile.ui;
import android.content.Context;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import android.view.View;
import android.widget.TextView;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import me.zhanghai.android.douya.R;
import me.zhanghai.android.douya.network.api.info.apiv2.User;
import me.zhanghai.android.douya.network.api.info.frodo.CollectableItem;
import me.zhanghai.android.douya.network.api.info.frodo.ItemCollectionState;
import me.zhanghai.android.douya.network.api.info.frodo.UserItems;
import me.zhanghai.android.douya.ui.FriendlyCardView;
import me.zhanghai.android.douya.util.ViewUtils;
public abstract class ProfileItemsLayout extends FriendlyCardView {
@BindView(R.id.title)
TextView mTitleText;
@BindView(R.id.item_list)
RecyclerView mItemList;
@BindView(R.id.empty)
TextView mEmptyView;
@BindView(R.id.view_more)
TextView mViewMoreText;
@BindView(R.id.secondary)
TextView mSecondaryText;
@BindView(R.id.tertiary)
TextView mTertiaryText;
private String mUserIdOrUid;
private ProfileItemAdapter mItemAdapter;
public ProfileItemsLayout(Context context) {
super(context);
init();
}
public ProfileItemsLayout(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public ProfileItemsLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
ViewUtils.inflateInto(R.layout.profile_items_layout, this);
ButterKnife.bind(this);
mItemList.setHasFixedSize(true);
mItemList.setLayoutManager(new LinearLayoutManager(getContext(),
LinearLayoutManager.HORIZONTAL, false));
mItemAdapter = new ProfileItemAdapter();
mItemList.setAdapter(mItemAdapter);
}
protected void bind(UserItems primaryItems, UserItems secondaryItems, UserItems tertiaryItems) {
final Context context = getContext();
ItemCollectionState state = primaryItems.getState();
CollectableItem.Type type = primaryItems.getType();
String stateString = state.getString(type, context);
mTitleText.setText(stateString);
OnClickListener viewMoreListener = new OnClickListener() {
@Override
public void onClick(View view) {
onViewPrimaryItems();
}
};
mTitleText.setOnClickListener(viewMoreListener);
mViewMoreText.setOnClickListener(viewMoreListener);
mItemAdapter.replace(primaryItems.items);
ViewUtils.setVisibleOrGone(mItemList, !primaryItems.items.isEmpty());
mEmptyView.setText(context.getString(R.string.profile_items_empty_format, stateString,
type.getName(context)));
ViewUtils.setVisibleOrGone(mEmptyView, primaryItems.items.isEmpty());
if (primaryItems.total > primaryItems.items.size()) {
mViewMoreText.setText(context.getString(R.string.view_more_with_count_format,
primaryItems.total));
} else {
mViewMoreText.setVisibility(GONE);
}
if (secondaryItems != null && secondaryItems.total > 0) {
mSecondaryText.setText(context.getString(R.string.profile_items_non_primary_format,
secondaryItems.getState().getString(secondaryItems.getType(), context),
secondaryItems.total));
mSecondaryText.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
onViewSecondaryItems();
}
});
} else {
mSecondaryText.setVisibility(GONE);
}
if (tertiaryItems != null && tertiaryItems.total > 0) {
mTertiaryText.setText(context.getString(R.string.profile_items_non_primary_format,
tertiaryItems.getState().getString(tertiaryItems.getType(), context),
tertiaryItems.total));
mTertiaryText.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
onViewTertiaryItems();
}
});
} else {
mTertiaryText.setVisibility(GONE);
}
}
public void bind(User user, List<UserItems> userItemList) {
mUserIdOrUid = user.getIdOrUid();
UserItems primaryItems = null;
UserItems secondaryItems = null;
UserItems tertiaryItems = null;
CollectableItem.Type type = getItemType();
for (UserItems userItems : userItemList) {
if (userItems.getType() == type) {
switch (userItems.getState()) {
case TODO:
tertiaryItems = userItems;
break;
case DOING:
secondaryItems = userItems;
break;
case DONE:
primaryItems = userItems;
break;
}
}
}
if (primaryItems == null) {
// HACK: Frodo API omits the done item if empty, but we need it.
primaryItems = new UserItems();
//noinspection deprecation
primaryItems.type = type.getApiString();
//noinspection deprecation
primaryItems.state = ItemCollectionState.DONE.getApiString();
}
bind(primaryItems, secondaryItems, tertiaryItems);
}
protected String getUserIdOrUid() {
return mUserIdOrUid;
}
protected abstract CollectableItem.Type getItemType();
protected abstract void onViewPrimaryItems();
protected abstract void onViewSecondaryItems();
protected abstract void onViewTertiaryItems();
}