package org.qii.weiciyuan.ui.adapter;
import org.qii.weiciyuan.R;
import org.qii.weiciyuan.bean.DMBean;
import org.qii.weiciyuan.bean.UserBean;
import org.qii.weiciyuan.support.asyncdrawable.IWeiciyuanDrawable;
import org.qii.weiciyuan.support.asyncdrawable.TimeLineBitmapDownloader;
import org.qii.weiciyuan.support.lib.TimeLineAvatarImageView;
import org.qii.weiciyuan.support.settinghelper.SettingUtility;
import org.qii.weiciyuan.support.utils.GlobalContext;
import org.qii.weiciyuan.support.utils.TimeLineUtility;
import org.qii.weiciyuan.support.utils.ViewUtility;
import org.qii.weiciyuan.ui.basefragment.AbstractTimeLineFragment;
import org.qii.weiciyuan.ui.userinfo.UserInfoActivity;
import android.app.Activity;
import android.content.Intent;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import java.util.List;
/**
* User: qii
* Date: 12-11-15
*/
public class DMConversationAdapter extends BaseAdapter {
private List<DMBean> bean;
private Fragment fragment;
private LayoutInflater inflater;
private ListView listView;
private TimeLineBitmapDownloader commander;
private final int TYPE_NORMAL = 0;
private final int TYPE_MYSELF = 1;
public DMConversationAdapter(Fragment fragment, List<DMBean> bean, ListView listView) {
this.bean = bean;
this.commander = TimeLineBitmapDownloader.getInstance();
this.inflater = fragment.getActivity().getLayoutInflater();
this.listView = listView;
this.fragment = fragment;
}
protected Activity getActivity() {
return fragment.getActivity();
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
DMBean dmBean = bean.get(position);
if (dmBean.getUser().getId().equals(GlobalContext.getInstance().getCurrentAccountId())) {
return TYPE_MYSELF;
} else {
return TYPE_NORMAL;
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
int showPosition = bean.size() - 1 - position;
DMViewHolder holder = null;
if (convertView == null
|| convertView.getTag(R.drawable.ic_launcher + getItemViewType(showPosition))
== null) {
switch (getItemViewType(showPosition)) {
case TYPE_NORMAL:
convertView = initNormalSimpleLayout(parent);
break;
case TYPE_MYSELF:
convertView = initMySimpleLayout(parent);
break;
default:
throw new IllegalArgumentException("dm user type is wrong");
}
holder = buildHolder(convertView);
convertView.setTag(R.drawable.ic_launcher + getItemViewType(showPosition), holder);
convertView.setTag(R.string.listview_index_tag,
R.drawable.ic_launcher + getItemViewType(showPosition));
} else {
holder = (DMViewHolder) convertView
.getTag(R.drawable.ic_launcher + getItemViewType(showPosition));
}
configViewFont(holder);
configLayerType(holder);
bindViewData(holder, showPosition);
return convertView;
}
private void configLayerType(DMViewHolder holder) {
boolean disableHardAccelerated = SettingUtility.disableHardwareAccelerated();
if (!disableHardAccelerated) {
return;
}
int currentWidgetLayerType = holder.content.getLayerType();
if (View.LAYER_TYPE_SOFTWARE != currentWidgetLayerType) {
if (holder.content != null) {
holder.content.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
if (holder.time != null) {
holder.time.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
}
}
private View initNormalSimpleLayout(ViewGroup parent) {
View convertView;
convertView = inflater
.inflate(R.layout.dmconversationadapter_item_normal_layout, parent, false);
return convertView;
}
private View initMySimpleLayout(ViewGroup parent) {
View convertView;
convertView = inflater
.inflate(R.layout.dmconversationadapter_item_myself_layout, parent, false);
return convertView;
}
private DMViewHolder buildHolder(View convertView) {
DMViewHolder holder = new DMViewHolder();
holder.content = ViewUtility.findViewById(convertView, R.id.content);
holder.time = ViewUtility.findViewById(convertView, R.id.time);
holder.avatar = (TimeLineAvatarImageView) convertView.findViewById(R.id.avatar);
return holder;
}
private void configViewFont(DMViewHolder holder) {
holder.time.setTextSize(SettingUtility.getFontSize() - 3);
holder.content.setTextSize(SettingUtility.getFontSize());
}
protected void bindViewData(DMViewHolder holder, int position) {
final DMBean msg = bean.get(position);
UserBean user = msg.getUser();
if (user != null) {
buildAvatar(holder.avatar, position, user);
} else {
holder.avatar.setVisibility(View.INVISIBLE);
}
if (!TextUtils.isEmpty(msg.getListViewSpannableString())) {
holder.content.setText(msg.getListViewSpannableString());
} else {
TimeLineUtility.addJustHighLightLinks(msg);
holder.content.setText(msg.getListViewSpannableString());
}
String time = msg.getListviewItemShowTime();
if (!holder.time.getText().toString().equals(time)) {
holder.time.setText(time);
}
holder.time.setTag(msg.getId());
}
protected List<DMBean> getList() {
return bean;
}
public boolean hasStableIds() {
return true;
}
@Override
public int getCount() {
if (getList() != null) {
return getList().size();
} else {
return 0;
}
}
@Override
public Object getItem(int position) {
if (position >= 0 && getList() != null && getList().size() > 0 && position < getList()
.size()) {
return getList().get(position);
}
return null;
}
@Override
public long getItemId(int position) {
if (getList() != null && getList().get(position) != null && getList().size() > 0
&& position < getList().size()) {
return Long.valueOf(getList().get(position).getId());
} else {
return -1;
}
}
protected void buildAvatar(TimeLineAvatarImageView view, int position, final UserBean user) {
((IWeiciyuanDrawable) view).checkVerified(user);
String image_url = user.getProfile_image_url();
if (!TextUtils.isEmpty(image_url)) {
view.setVisibility(View.VISIBLE);
commander
.downloadAvatar(view.getImageView(), user, (AbstractTimeLineFragment) fragment);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getActivity(), UserInfoActivity.class);
intent.putExtra("token", GlobalContext.getInstance().getSpecialToken());
intent.putExtra("user", user);
getActivity().startActivity(intent);
}
});
} else {
view.setVisibility(View.GONE);
}
}
private static class DMViewHolder {
TextView content;
TextView time;
TimeLineAvatarImageView avatar;
}
}