package com.wyp.materialqqlite.ui;
import java.io.File;
import java.util.List;
import com.wyp.materialqqlite.AppData;
import com.wyp.materialqqlite.R;
import com.wyp.materialqqlite.Utils;
import com.wyp.materialqqlite.qqclient.QQClient;
import com.wyp.materialqqlite.qqclient.protocol.protocoldata.BuddyInfo;
import com.wyp.materialqqlite.qqclient.protocol.protocoldata.QQStatus;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
public class SettingListAdapter extends BaseAdapter {
private Context m_Context;
private List<SettingListItem> m_arrData;
private int m_cxAvatar, m_cyAvatar;
private int m_pxAvatarRound;
public SettingListAdapter(Context context, List<SettingListItem> data) {
m_Context = context;
m_arrData = data;
m_cxAvatar = (int)context.getResources().getDimension(R.dimen.msgList_cxAvatar);
m_cyAvatar = (int)context.getResources().getDimension(R.dimen.msgList_cyAvatar);
m_pxAvatarRound = (int)context.getResources().getDimension(R.dimen.pxAvatarRound);
}
@Override
public int getCount() {
if (m_arrData != null)
return m_arrData.size();
else
return 0;
}
@Override
public Object getItem(int position) {
if (m_arrData != null &&
position >= 0 && position < m_arrData.size())
return m_arrData.get(position);
else
return null;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getViewTypeCount() {
return SettingListItem.TYPE_COUNT;
}
@Override
public int getItemViewType(int position) {
if (m_arrData != null) {
SettingListItem data = m_arrData.get(position);
if (data != null)
return data.m_nType;
}
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
SettingListItem data = m_arrData.get(position);
if (null == data)
return convertView;
ViewHolder holder = null;
switch (data.m_nType) {
case SettingListItem.TYPE_CONTENT:
if (null == convertView) {
convertView = LayoutInflater.from(m_Context).inflate(
R.layout.setting_list_item_0, parent, false);
holder = new ViewHolder();
holder.m_layoutBg = (LinearLayout)
convertView.findViewById(R.id.setting_item_bg);
holder.m_txtTitle = (TextView)
convertView.findViewById(R.id.setting_item_txtTitle);
holder.m_txtDesc = (TextView)
convertView.findViewById(R.id.setting_item_txtDesc);
convertView.setTag(holder);
} else {
holder = (ViewHolder)convertView.getTag();
}
break;
case SettingListItem.TYPE_USERINFO:
if (null == convertView) {
convertView = LayoutInflater.from(m_Context).inflate(
R.layout.setting_list_item_1, parent, false);
holder = new ViewHolder();
holder.m_layoutBg = (LinearLayout)
convertView.findViewById(R.id.setting_item_bg);
holder.m_imgAvatar = (ImageView)
convertView.findViewById(R.id.setting_item_imgAvatar);
holder.m_imgState = (ImageView)
convertView.findViewById(R.id.setting_item_imgState);
holder.m_txtName = (TextView)
convertView.findViewById(R.id.setting_item_txtName);
holder.m_txtSign = (TextView)
convertView.findViewById(R.id.setting_item_txtSign);
convertView.setTag(holder);
} else {
holder = (ViewHolder)convertView.getTag();
}
break;
case SettingListItem.TYPE_MARGIN_M:
if (null == convertView) {
convertView = LayoutInflater.from(m_Context).inflate(
R.layout.list_item_margin_m, parent, false);
}
break;
case SettingListItem.TYPE_MARGIN_S:
default:
if (null == convertView) {
convertView = LayoutInflater.from(m_Context).inflate(
R.layout.list_item_margin_s, parent, false);
}
break;
}
if (null == holder)
return convertView;
if (isSingleSubItem(position)) {
holder.m_layoutBg.setBackgroundResource(R.drawable.listitem_bg_style);
} else if (isFirstSubItem(position)) {
holder.m_layoutBg.setBackgroundResource(R.drawable.listitem_bg_top_style);
} else if (isLastSubItem(position)) {
holder.m_layoutBg.setBackgroundResource(R.drawable.listitem_bg_bottom_style);
} else {
holder.m_layoutBg.setBackgroundResource(R.drawable.listitem_bg_mid_style);
}
if (SettingListItem.TYPE_CONTENT == data.m_nType) {
// StateListDrawable bg = new StateListDrawable();
// Drawable normal = m_Context.getResources().getDrawable(R.drawable.skin_setting_strip_middle_unpressed);
// //Drawable selected = this.getResources().getDrawable(mImageIds[1]);
// Drawable pressed = m_Context.getResources().getDrawable(R.drawable.skin_setting_strip_middle_pressed);
// bg.addState(new int[]{android.R.attr.state_pressed}, pressed);
// //bg.addState(View.ENABLED_FOCUSED_STATE_SET, selected);
// bg.addState(new int[]{}, normal);
// holder.m_layoutBg.setBackgroundDrawable(bg);
holder.m_txtTitle.setText(data.m_strTitle);
holder.m_txtDesc.setText("");
/* if (7 == position) { // 个性签名
QQClient client = AppData.getAppData().getQQClient();
BuddyInfo buddyInfo = client.getUserInfo();
if (!buddyInfo.isHasQQSign()) {
client.updateBuddySign(buddyInfo.m_nQQUin);
} else {
holder.m_txtDesc.setText(buddyInfo.m_strSign);
}
}*/
} else if(SettingListItem.TYPE_USERINFO == data.m_nType) {
Bitmap bmp = null;
QQClient client = AppData.getAppData().getQQClient();
BuddyInfo buddyInfo = client.getUserInfo();
String strFileName = client.
getBuddyHeadPicFullName(client.getUserInfo().m_nQQNum);
File file = new File(strFileName);
if (!file.exists()) {
client.updateBuddyHeadPic(buddyInfo.m_nQQUin, buddyInfo.m_nQQNum);
} else {
bmp = BitmapFactory.decodeFile(strFileName);
if (bmp != null) {
bmp = Utils.zoomImg(bmp, m_cxAvatar, m_cyAvatar);
bmp = Utils.getRoundedCornerBitmap(bmp, m_pxAvatarRound);
}
}
if (bmp != null)
holder.m_imgAvatar.setImageBitmap(bmp);
else
holder.m_imgAvatar.setImageResource(R.drawable.h001);
int nStatus = client.getStatus();
if (nStatus != QQStatus.HIDDEN)
holder.m_imgState.setImageResource(R.drawable.status_online_btn_2);
else
holder.m_imgState.setImageResource(R.drawable.status_invisible_btn_2);
if (!Utils.isEmptyStr(buddyInfo.m_strNickName))
holder.m_txtName.setText(buddyInfo.m_strNickName);
else
holder.m_txtName.setText("");
if (!buddyInfo.isHasQQSign()) {
client.updateBuddySign(buddyInfo.m_nQQUin);
} else {
holder.m_txtSign.setText(buddyInfo.m_strSign);
}
}
return convertView;
}
private boolean isFirstSubItem(int nPos) {
if (nPos < 0 || nPos >= m_arrData.size())
return false;
SettingListItem data = m_arrData.get(nPos);
if (data.m_nType != SettingListItem.TYPE_CONTENT
&& data.m_nType != SettingListItem.TYPE_USERINFO)
return false;
if (nPos == 0)
return true;
data = m_arrData.get(nPos-1);
return (data.m_nType == SettingListItem.TYPE_MARGIN_S
|| data.m_nType == SettingListItem.TYPE_MARGIN_M);
}
private boolean isLastSubItem(int nPos) {
if (nPos < 0 || nPos >= m_arrData.size())
return false;
SettingListItem data = m_arrData.get(nPos);
if (data.m_nType != SettingListItem.TYPE_CONTENT
&& data.m_nType != SettingListItem.TYPE_USERINFO)
return false;
if (nPos == m_arrData.size()-1)
return true;
data = m_arrData.get(nPos+1);
return (data.m_nType == SettingListItem.TYPE_MARGIN_S
|| data.m_nType == SettingListItem.TYPE_MARGIN_M);
}
private boolean isSingleSubItem(int nPos) {
return isFirstSubItem(nPos) && isLastSubItem(nPos);
}
private class ViewHolder {
LinearLayout m_layoutBg;
ImageView m_imgAvatar;
ImageView m_imgState;
TextView m_txtName;
TextView m_txtSign;
TextView m_txtTitle;
TextView m_txtDesc;
}
}