/*
* Copyright (c) 2015 Zhang Hai <Dreaming.in.Code.ZH@Gmail.com>
* All Rights Reserved.
*/
package me.zhanghai.android.douya.broadcast.ui;
import android.content.Context;
import android.support.v4.view.ViewCompat;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
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.Broadcast;
import me.zhanghai.android.douya.ui.SimpleAdapter;
import me.zhanghai.android.douya.util.RecyclerViewUtils;
import me.zhanghai.android.douya.util.ViewUtils;
public class BroadcastAdapter extends SimpleAdapter<Broadcast, BroadcastAdapter.ViewHolder> {
private Listener mListener;
public BroadcastAdapter(List<Broadcast> broadcastList, Listener listener) {
super(broadcastList);
mListener = listener;
setHasStableIds(true);
}
@Override
public long getItemId(int position) {
return getItem(position).id;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ViewHolder(ViewUtils.inflate(R.layout.broadcast_item, parent));
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
Broadcast originalBroadcast = getItem(position);
holder.rebroadcastedByText.setText(originalBroadcast.getRebroadcastedBy(
RecyclerViewUtils.getContext(holder)));
final Broadcast broadcast = originalBroadcast.rebroadcastedBroadcast != null ?
originalBroadcast.rebroadcastedBroadcast : originalBroadcast;
holder.cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mListener.onOpenBroadcast(broadcast, getSharedView(holder));
}
});
holder.broadcastLayout.bindBroadcast(broadcast);
holder.broadcastLayout.setListener(new BroadcastLayout.Listener() {
@Override
public void onLikeClicked() {
mListener.onLikeBroadcast(broadcast, !broadcast.isLiked);
}
@Override
public void onRebroadcastClicked() {
mListener.onRebroadcastBroadcast(broadcast, !broadcast.isRebroadcasted());
}
@Override
public void onCommentClicked() {
// Not setting button disabled because we are using enabled state for indeterminate
// state due to network, and we want the click to always open the broadcast for our
// user.
mListener.onCommentBroadcast(broadcast, getSharedView(holder));
}
});
ViewCompat.setTransitionName(getSharedView(holder), broadcast.makeTransitionName());
}
private static View getSharedView(ViewHolder holder) {
Context context = holder.itemView.getContext();
// HACK: Transition is so hard to work with, but this gives a better effect.
return ViewUtils.hasSw600Dp(context) ? holder.cardView : holder.broadcastLayout;
}
@Override
public void onViewRecycled(ViewHolder holder) {
holder.broadcastLayout.releaseBroadcast();
}
public interface Listener {
void onLikeBroadcast(Broadcast broadcast, boolean like);
void onRebroadcastBroadcast(Broadcast broadcast, boolean rebroadcast);
void onCommentBroadcast(Broadcast broadcast, View sharedView);
void onOpenBroadcast(Broadcast broadcast, View sharedView);
}
static class ViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.rebroadcasted_by)
public TextView rebroadcastedByText;
@BindView(R.id.card)
public CardView cardView;
@BindView(R.id.broadcast)
public BroadcastLayout broadcastLayout;
public ViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
}