/*
* 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.text.TextUtils;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
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.broadcast.ui.BroadcastActivity;
import me.zhanghai.android.douya.broadcast.ui.BroadcastListActivity;
import me.zhanghai.android.douya.network.api.info.apiv2.Broadcast;
import me.zhanghai.android.douya.network.api.info.apiv2.Image;
import me.zhanghai.android.douya.network.api.info.apiv2.Photo;
import me.zhanghai.android.douya.network.api.info.apiv2.User;
import me.zhanghai.android.douya.ui.FriendlyCardView;
import me.zhanghai.android.douya.ui.TimeActionTextView;
import me.zhanghai.android.douya.util.ImageUtils;
import me.zhanghai.android.douya.util.ViewUtils;
public class ProfileBroadcastsLayout extends FriendlyCardView {
private static final int BROADCAST_COUNT_MAX = 3;
@BindView(R.id.title)
TextView mTitleText;
@BindView(R.id.broadcast_list)
LinearLayout mBroadcastList;
@BindView(R.id.empty)
View mEmptyView;
@BindView(R.id.view_more)
TextView mViewMoreText;
public ProfileBroadcastsLayout(Context context) {
super(context);
init();
}
public ProfileBroadcastsLayout(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public ProfileBroadcastsLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
ViewUtils.inflateInto(R.layout.profile_broadcasts_layout, this);
ButterKnife.bind(this);
}
public void bind(final User user, List<Broadcast> broadcastList) {
final Context context = getContext();
View.OnClickListener viewMoreListener = new OnClickListener() {
@Override
public void onClick(View view) {
context.startActivity(BroadcastListActivity.makeIntent(user, context));
}
};
mTitleText.setOnClickListener(viewMoreListener);
mViewMoreText.setOnClickListener(viewMoreListener);
int i = 0;
for (final Broadcast broadcast : broadcastList) {
if (i >= BROADCAST_COUNT_MAX) {
break;
}
if (broadcast.rebroadcastedBroadcast != null) {
continue;
}
if (i >= mBroadcastList.getChildCount()) {
ViewUtils.inflateInto(R.layout.profile_broadcast_item, mBroadcastList);
}
View broadcastLayout = mBroadcastList.getChildAt(i);
broadcastLayout.setVisibility(VISIBLE);
BroadcastLayoutHolder holder = (BroadcastLayoutHolder) broadcastLayout.getTag();
if (holder == null) {
holder = new BroadcastLayoutHolder(broadcastLayout);
broadcastLayout.setTag(holder);
ViewUtils.setTextViewLinkClickable(holder.textText);
}
// HACK: Should not change on rebind.
if (holder.boundBroadcastId != broadcast.id) {
String imageUrl = null;
if (broadcast.attachment != null) {
imageUrl = broadcast.attachment.image;
}
if (TextUtils.isEmpty(imageUrl)) {
List<Image> images = broadcast.images.size() > 0 ? broadcast.images
: Photo.toImageList(broadcast.photos);
if (images.size() > 0){
imageUrl = images.get(0).medium;
}
}
if (!TextUtils.isEmpty(imageUrl)) {
holder.image.setVisibility(VISIBLE);
ImageUtils.loadImage(holder.image, imageUrl);
} else {
holder.image.setVisibility(GONE);
}
CharSequence text = broadcast.getTextWithEntities(context);
if (TextUtils.isEmpty(text) && broadcast.attachment != null) {
text = broadcast.attachment.title;
}
holder.textText.setText(text);
holder.timeActionText.setDoubanTimeAndAction(broadcast.createdAt, broadcast.action);
broadcastLayout.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
context.startActivity(BroadcastActivity.makeIntent(broadcast, context));
}
});
holder.boundBroadcastId = broadcast.id;
}
++i;
}
ViewUtils.setVisibleOrGone(mBroadcastList, i != 0);
ViewUtils.setVisibleOrGone(mEmptyView, i == 0);
if (user.broadcastCount > i) {
mViewMoreText.setText(context.getString(R.string.view_more_with_count_format,
user.broadcastCount));
} else {
mViewMoreText.setVisibility(GONE);
}
for (int count = mBroadcastList.getChildCount(); i < count; ++i) {
mBroadcastList.getChildAt(i).setVisibility(GONE);
}
}
static class BroadcastLayoutHolder {
@BindView(R.id.image)
public ImageView image;
@BindView(R.id.text)
public TextView textText;
@BindView(R.id.time_action)
public TimeActionTextView timeActionText;
public long boundBroadcastId;
public BroadcastLayoutHolder(View broadcastLayout) {
ButterKnife.bind(this, broadcastLayout);
}
}
}