package com.sogou.sogouchat.ui;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import com.sogou.sogouchat.R;
import com.sogou.sogouchat.SogouChatApp;
import com.sogou.sogouchat.bean.ContactNode;
import com.sogou.sogouchat.bean.TelNode;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.text.format.DateFormat;
import android.text.format.Time;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
public class NewsListAdapter extends BaseAdapter {
public final class ViewHolder{
public ImageView mImg;
public TextView mName;
public TextView mLastBody;
public TextView mLastDate;
public BadgeView mBadge;
}
public ArrayList<TelNode> mData = new ArrayList<TelNode>();
private LayoutInflater mInflater;
private TabMainActivity mActivity;
private SogouChatApp mApp;
private static final int mDroidGreen = Color.parseColor("#A4C639");
private int mJuliaDay;
public NewsListAdapter(Context context, SogouChatApp app){
mActivity =(TabMainActivity) context;
mInflater = LayoutInflater.from(context);
mApp = app;
}
public void extraList() {
mData.clear();
int totalNew = 0;
Iterator<TelNode> telIt = mApp.mTelList.iterator();
while (telIt.hasNext()) {
TelNode telNode = telIt.next();
if (telNode.mMsgCnt > 0) {
mData.add(telNode);
if (telNode.mNewMsgCnt > 0)
totalNew += telNode.mNewMsgCnt;
}
}
// sort list
Collections.sort(mData, new SortByDate());
sortDataByDate();
if (totalNew > 0) {
mActivity.setTotalNewMsgCnt(totalNew);
}
// // Print
// Iterator<TelNode> ii = mData.iterator();
// while (ii.hasNext()) {
// TelNode telNode = ii.next();
// Log.i("NewsListAdapter", telNode.mName + telNode.mLastBody);
// }
}
//倒序
class SortByDate implements Comparator {
public int compare(Object o1, Object o2) {
TelNode item1 = (TelNode) o1;
TelNode item2 = (TelNode) o2;
if (item1.mLastDate > item2.mLastDate)
return -1;
else
return 1;
}
}
ArrayList<TelNode> getData(){
return mData;
}
void setData(ArrayList<TelNode> data){
mData = data;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mData.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
TelNode item = mData.get(position);
if (convertView == null) {
holder = new ViewHolder();
if (item.mTel != null) {
convertView = mInflater.inflate(R.layout.item_news_list, null);
} else {
convertView = mInflater.inflate(R.layout.item_news_separator,null);
}
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
if (holder == null) {
holder = new ViewHolder();
}
if (item.mTel != null) {
if (holder.mName== null || holder.mName.getId() != R.id.news_text_name){
convertView = mInflater.inflate(R.layout.item_news_list, null);
}
holder.mImg = (ImageView) convertView.findViewById(R.id.news_icon);
holder.mName = (TextView) convertView.findViewById(R.id.news_text_name);
holder.mLastBody = (TextView) convertView .findViewById(R.id.news_text_msg);
holder.mLastDate = (TextView) convertView.findViewById(R.id.news_text_date);
holder.mBadge = new BadgeView(mActivity, holder.mImg);
holder.mBadge.setBadgeBackgroundColor(mDroidGreen);
holder.mBadge.setTextColor(Color.BLACK);
holder.mName.setText(item.mName);
holder.mLastBody.setText(item.mLastBody);
String dateFormat = "MM/dd h:mmaa";
// if (isSameDay(item.mTelNode.mLastDate)){
// dateFormat = "h:mmaa";
// }
// else {
// dateFormat = "MM/dd h:mmaa";
// }
SimpleDateFormat format1 = new SimpleDateFormat(dateFormat);
String date = format1.format(item.mLastDate);
holder.mLastDate.setText(date);
if (item.mNewMsgCnt > 0) {
holder.mBadge.setText(String.valueOf(item.mNewMsgCnt));
holder.mBadge.show();
} else {
holder.mBadge.hide();
}
}
else{
if (holder.mName== null || holder.mName.getId() != R.id.news_text_separator){
convertView = mInflater.inflate(R.layout.item_news_separator,null);
}
holder.mName = (TextView) convertView.findViewById(R.id.news_text_separator);
holder.mName.setText(item.mName);
}
return convertView;
}
private final void sortDataByDate(){
int sIndex=0;
for(int i =0; i < mData.size(); i++){
TelNode item =mData.get(i);
int ssIndex = beforeToday(item.mLastDate);
if (ssIndex != sIndex){
sIndex = ssIndex;
TelNode separator = new TelNode();
separator.mName = getSeparatorName(sIndex);
separator.mTel = null;
mData.add(i, separator);
i++;
}
}
}
public static int beforeToday(long date) {
int sIndex;
int bDay;
Time nTime = new Time();
nTime.setToNow();
Time oTime = new Time();
oTime.set(date);
int dayNow = Time.getJulianDay(nTime.normalize(true), 0);
int day = Time.getJulianDay(date, 0);
//天数差
bDay = dayNow - day;
int wDay = nTime.weekDay;
int nMon= nTime.month;
int oMon = oTime.month;
if (bDay == 0){
sIndex = 0;
}
else if (bDay == 1){
sIndex = 1;
}
else if (bDay == 2){
sIndex = 2;
}
//一周之内
else if (bDay >2 && bDay<= wDay ){
sIndex = oTime.weekDay+10;
}
//上周
else if (bDay > wDay && bDay <= 7 + wDay && nMon == oMon ){
sIndex = 20;
}
//两周以前
else if (bDay > 7 + wDay && bDay <= 14 + wDay && nMon == oMon ){
sIndex = 30;
}
//三周以前
else if (bDay > 14 + wDay -2 && bDay <= 21 + wDay && nMon == oMon ){
sIndex = 40;
}
//上个月
else if (nMon - oMon == 1 ){
sIndex = 50;
}
//更早
else {
sIndex = 100;
}
return sIndex;
}
private String getSeparatorName(int sIndex){
String name="更早";
switch(sIndex){
case 0:
name = "今天";
break;
case 1:
name = "昨天";
break;
case 2:
name = "前天";
break;
case 10:
name = "周天";
break;
case 11:
name = "周一";
break;
case 12:
name = "周二";
break;
case 13:
name = "周三";
break;
case 14:
name = "周四";
break;
case 15:
name = "周五";
break;
case 16:
name = "周六";
break;
case 20:
name = "上周";
break;
case 30:
name = "两周以前";
break;
case 40:
name = "三周以前";
break;
case 50:
name = "上月";
break;
default:
name = "更早";
break;
}
return name;
}
}