package com.sogouchat.smsmms;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Vector;
import org.w3c.dom.smil.SMILDocument;
import org.w3c.dom.smil.SMILElement;
import org.xml.sax.SAXException;
import com.sogouchat.smil.parser.SmilXmlParser;
//import Sogou.Smart.smartsms.dom.smil.parser.SmilXmlParser;
import android.R.bool;
import android.R.integer;
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteException;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.provider.ContactsContract.Contacts;
import android.util.Log;
import android.webkit.WebChromeClient.CustomViewCallback;
public class SmsMgr {
public static final String URI_Thread = "content://mms-sms/threadID";
public static final String URI_Con = "content://mms-sms/conversations";
private static SmsMgr s_lpthis = new SmsMgr();
private static final String TAG = "SmsMgr";
public static SmsMgr GetI(){
return s_lpthis;
}
private Context context;
public SmsMgr(){
}
public void LoadAll(){
m_SmsList.clear();
m_SmsContactsList.clear();
m_SmsNewList.clear();
m_SmsMap.clear();
Load();
LoadMms();
LoadUnReadSMS();
LoadUnReadMMS();
SortSmsTotal(m_SmsList);
SortSmsTotal(m_SmsContactsList);
ParseNewMessageList();
}
public void Init(Context context){
this.context = context;
m_SmsList = new Vector<SmsTotal>();
m_SmsContactsList = new Vector<SmsTotal>();
m_SmsNewList = new Vector<SmsTotal>();
m_SmsMap = new HashMap<Integer, SmsTotal>();
//LoadTest();
// Load();
// LoadMms();
// SortSmsTotal(m_SmsList);
// SortSmsTotal(m_SmsContactsList);
//LoadAll();
Log.i(TAG,"smsListCount:"+m_SmsList.size());
}
public void LoadTest(){
ContentResolver cr = context.getContentResolver();
Uri uri = Uri.parse(URI_Con);
Cursor cursor = cr.query(uri, null, null, null, null);
int nColumnCount = cursor.getColumnCount();
for (int i = 0; i < nColumnCount; i++) {
Log.i(TAG, ""+i+" "+cursor.getColumnName(i));
}
int j= 0;
while (cursor.moveToNext()) {
String strText="";
for (int i = 0; i < nColumnCount; i++) {
//Log.i(TAG, ""+j+":"+i+" "+cursor.getString(i));
strText +=i;
strText += cursor.getString(i);
strText +=" ";
}
Log.i(TAG, j+":"+" "+strText);
j++;
//break;
}
}
class SmsTotalCompa implements Comparator<SmsTotal>{
public int compare(SmsTotal lhs, SmsTotal rhs) {
// TODO Auto-generated method stub
if (lhs.tmDate<rhs.tmDate) {
return 1;
}else if (lhs.tmDate==rhs.tmDate) {
return 0;
} else {
return -1;
}
}
}
class SmsCompa implements Comparator<Sms>{
public int compare(Sms lhs, Sms rhs) {
// TODO Auto-generated method stub
if (lhs.tmDate>rhs.tmDate) {
return 1;
}else if (lhs.tmDate==rhs.tmDate) {
return 0;
} else {
return -1;
}
}
}
public void LoadContactsByThreadID(int nThreadID){
try{
ContentResolver cr = context.getContentResolver();
// String[] projection = new String[]{"_id", "address", "person",
// "body", "date", "type","thread_id"};
String[] projection = new String[]{MmsBase.ID, MmsBase.THREAD_ID, MmsBase.DATE,
MmsBase.SUBJECT,"Count(*)",MmsBase.TYPE};
Uri uri = Uri.parse(MmsBase.MMS_URI_ALL);
String selection = "_id";
//selection = null;
Cursor cur = cr.query(uri, projection, selection, null,MmsBase.DATE);
if (cur.moveToFirst()) {
} else {
}
} catch(SQLiteException ex) {
Log.d("SQLiteException in getSmsInPhone", ex.getMessage());
}
}
public void ParseNewMessageList(){
for (SmsTotal smsTotal : m_SmsList) {
if (smsTotal.nUnReadCount>0) {
m_SmsNewList.add(smsTotal);
}
}
SortSmsTotal(m_SmsNewList);
}
public void LoadMms(){
try{
ContentResolver cr = context.getContentResolver();
// String[] projection = new String[]{"_id", "address", "person",
// "body", "date", "type","thread_id"};
String[] projection = new String[]{MmsBase.ID, MmsBase.THREAD_ID, MmsBase.DATE,
MmsBase.SUBJECT,"Count(*)",MmsBase.TYPE,MmsBase.READ};
Uri uri = Uri.parse(MmsBase.MMS_URI_ALL);
String selection = "1=1) group by "+MmsBase.THREAD_ID+" -- (";
//selection = null;
Cursor cur = cr.query(uri, projection, selection, null,MmsBase.DATE);
if (cur.moveToFirst()) {
String name;
String phoneNumber="";
String smsbody;
//int type;
long tmDate;
int nThreadID;
int nCount = 0;
int nID = 0;
String subject="";
String strFix = "";
int nRead = 0;
boolean bRead = true;
int idColumn = cur.getColumnIndex(MmsBase.ID);
int threadidColumn = cur.getColumnIndex(MmsBase.THREAD_ID);
int dateColumn = cur.getColumnIndex(MmsBase.DATE);
int subjectColumn = cur.getColumnIndex(MmsBase.SUBJECT);
int typeColumn = cur.getColumnIndex(MmsBase.TYPE);
int readColumn = cur.getColumnIndex(MmsBase.READ);
//int threadidColumn = cur.getColumnIndex(SmsBase.SMS_THREAD_ID);
do{
subject = cur.getString(subjectColumn);
String str="";
if (subject!=null) {
try {
str=new String(subject.getBytes("ISO8859_1"),"utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
subject = str;
nRead = cur.getInt(readColumn);
if (nRead== SmsBase.Sms_Read_On) {
bRead = true;
}else {
bRead = false;
}
//phoneNumber = cur.getString(phoneNumberColumn);
// smsbody = cur.getString(smsbodyColumn);
tmDate = Long.parseLong(cur.getString(dateColumn));
tmDate*=1000;
nThreadID = Integer.parseInt(cur.getString(threadidColumn));
nID =cur.getInt(idColumn);
int typeId = cur.getInt(typeColumn);
//type = typeId;
nCount = cur.getInt(4);
Cursor cAddr = null;
Cursor cPhones = null;
try {
//��ݲ���id��addr���в�������˵绰���룬�������msg_idӳ��pdu���id��
String selectionAdd = new String("msg_id=" + nID );
Uri uriAddr = Uri.parse("content://mms/" + nID + "/addr");
//Uri uriAddr = Uri.parse("content://mms/addr");
cAddr = cr.query(uriAddr, null, selectionAdd, null, null);
//���addr���еĵ绰������phones���в��PERSON_ID,���PERSON_IDӳ��people���е�_id
if(cAddr.moveToFirst()){//�ô���õ�2����¼����һ����¼Ϊ�����˺��룬�ڶ���Ϊ�������
if (typeId == MmsBase.MESSAGE_BOX_SENT) {
cAddr.moveToNext();
}
int nAddrColumn = cAddr.getColumnIndex("address");
phoneNumber= cAddr.getString(nAddrColumn);
}
} catch(SQLiteException ex) {
Log.d("SQLiteException in getSmsInPhone", ex.getMessage());
}
SmsTotal mSms =null;
mSms = FindItemByThreadID(nThreadID);
if (mSms==null) {
mSms = new SmsTotal(null,phoneNumber, subject, tmDate, typeId,nThreadID,nCount,bRead);
mSms.bHasMms = true;
mSms.nMmsCount = nCount;
if (!bRead) {
mSms.bHasMmsUnRead =true;
}
AddItem(mSms);
}else {
if (!bRead) {
mSms.bHasMmsUnRead =true;
}
mSms.AddMmsCount(nCount,tmDate,subject,bRead);
}
}while(cur.moveToNext());
} else {
}
} catch(SQLiteException ex) {
Log.d("SQLiteException in getSmsInPhone", ex.getMessage());
}
}
public void Load(){
try{
ContentResolver cr = context.getContentResolver();
// String[] projection = new String[]{"_id", "address", "person",
// "body", "date", "type","thread_id"};
String[] projection = new String[]{SmsBase.SMS_ID, SmsBase.SMS_ADDRESS, SmsBase.SMS_PERSON,
SmsBase.SMS_BODY, SmsBase.SMS_DATE, SmsBase.SMS_TYPE,SmsBase.SMS_THREAD_ID,"Count(*)",SmsBase.SMS_READ};
Uri uri = Uri.parse(SmsBase.SMS_URI_ALL);
String selection = "1=1) group by "+SmsBase.SMS_THREAD_ID+" -- (";
//selection = null;
Cursor cur = cr.query(uri, projection, selection, null,SmsBase.SMS_DATE);
if (cur.moveToFirst()) {
String name;
String phoneNumber;
String smsbody;
int type;
long tmDate;
int nThreadID;
int nCount = 0;
int nRead = 0;
boolean bRead = true;
int nameColumn = cur.getColumnIndex(SmsBase.SMS_PERSON);
int phoneNumberColumn = cur.getColumnIndex(SmsBase.SMS_ADDRESS);
int smsbodyColumn = cur.getColumnIndex(SmsBase.SMS_BODY);
int dateColumn = cur.getColumnIndex(SmsBase.SMS_DATE);
int typeColumn = cur.getColumnIndex(SmsBase.SMS_TYPE);
int threadidColumn = cur.getColumnIndex(SmsBase.SMS_THREAD_ID);
int readColumu = cur.getColumnIndex(SmsBase.SMS_READ);
do{
name = cur.getString(nameColumn);
phoneNumber = cur.getString(phoneNumberColumn);
smsbody = cur.getString(smsbodyColumn);
tmDate = Long.parseLong(cur.getString(dateColumn));
nThreadID = Integer.parseInt(cur.getString(threadidColumn));
int typeId = cur.getInt(typeColumn);
type = typeId;
nCount = cur.getInt(7);
nRead = cur.getInt(readColumu);
if (nRead== SmsBase.Sms_Read_On) {
bRead = true;
}else {
bRead = false;
}
if(smsbody == null) smsbody = "";
SmsTotal mSms = new SmsTotal(name, phoneNumber, smsbody, tmDate, type,nThreadID,nCount,bRead);
if (!bRead) {
mSms.bHasSmsUnRead =true;
}
AddItem(mSms);
//m_SmsList.add(mSms);
//m_SmsMap.put(nThreadID, mSms);
}while(cur.moveToNext());
} else {
}
} catch(SQLiteException ex) {
Log.d("SQLiteException in getSmsInPhone", ex.getMessage());
}
}
public void LoadUnReadSMS(){
try{
ContentResolver cr = context.getContentResolver();
String[] projection = new String[]{SmsBase.SMS_THREAD_ID,"Count(*)"};
Uri uri = Uri.parse(SmsBase.SMS_URI_ALL);
String selection = SmsBase.SMS_READ+"=0 "+") group by "+SmsBase.SMS_THREAD_ID+" -- (";
Cursor cur = cr.query(uri, projection, selection, null,SmsBase.SMS_DATE);
int threadidColumn = cur.getColumnIndex(SmsBase.SMS_THREAD_ID);
if (cur.moveToFirst()) {
int nThreadID;
int nCount = 0;
do{
nThreadID = Integer.parseInt(cur.getString(threadidColumn));
nCount = cur.getInt(1);
SmsTotal mSmsTotal =null;
mSmsTotal = FindItemByThreadID(nThreadID);
if (mSmsTotal!=null) {
mSmsTotal.nUnReadSmsCount = nCount;
mSmsTotal.nUnReadCount = nCount;
}
}while(cur.moveToNext());
} else {
}
} catch(SQLiteException ex) {
Log.d("SQLiteException in getSmsInPhone", ex.getMessage());
}
}
public void LoadUnReadMMS(){
try{
ContentResolver cr = context.getContentResolver();
String[] projection = new String[]{ MmsBase.THREAD_ID,"Count(*)"};
Uri uri = Uri.parse(MmsBase.MMS_URI_ALL);
String selection = MmsBase.READ+"=0) group by "+MmsBase.THREAD_ID+" -- (";
Cursor cur = cr.query(uri, projection, selection, null,MmsBase.DATE);
if (cur.moveToFirst()) {
int nThreadID;
int nCount = 0;
int threadidColumn = cur.getColumnIndex(SmsBase.SMS_THREAD_ID);
do{
nThreadID = Integer.parseInt(cur.getString(threadidColumn));
nCount = cur.getInt(1);
SmsTotal mSmsTotal =null;
mSmsTotal = FindItemByThreadID(nThreadID);
if (mSmsTotal!=null) {
mSmsTotal.nUnReadMmsCount = nCount;
mSmsTotal.nUnReadCount += nCount;
}
}while(cur.moveToNext());
} else {
}
} catch(SQLiteException ex) {
Log.d("SQLiteException in getSmsInPhone", ex.getMessage());
}
}
public void LoadSmsItemsByThreadID(int nThreadID,SmsTotal smsTotal){
try{
smsTotal.smsList.clear();
ContentResolver cr = context.getContentResolver();
// String[] projection = new String[]{"_id", "address", "person",
// "body", "date", "type","thread_id"};
String[] projection = new String[]{SmsBase.SMS_ID, SmsBase.SMS_ADDRESS, SmsBase.SMS_PERSON,
SmsBase.SMS_BODY, SmsBase.SMS_DATE, SmsBase.SMS_TYPE};
Uri uri = Uri.parse(SmsBase.SMS_URI_ALL);
String selection = SmsBase.SMS_THREAD_ID+" == "+nThreadID;
//String[] stringArgsString={""+nThreadID};
//selection = null;
Cursor cur = cr.query(uri, projection, selection, null, SmsBase.SMS_DATE);
if (cur.moveToFirst()) {
String name;
String phoneNumber;
String smsbody;
int type;
long tmDate;
int nID;
int nIDColumn = cur.getColumnIndex(SmsBase.SMS_ID);
int nameColumn = cur.getColumnIndex(SmsBase.SMS_PERSON);
int phoneNumberColumn = cur.getColumnIndex(SmsBase.SMS_ADDRESS);
int smsbodyColumn = cur.getColumnIndex(SmsBase.SMS_BODY);
int dateColumn = cur.getColumnIndex(SmsBase.SMS_DATE);
int typeColumn = cur.getColumnIndex(SmsBase.SMS_TYPE);
do{
nID = cur.getInt(nIDColumn);
name = cur.getString(nameColumn);
phoneNumber = cur.getString(phoneNumberColumn);
smsbody = cur.getString(smsbodyColumn);
tmDate = Long.parseLong(cur.getString(dateColumn));
int typeId = cur.getInt(typeColumn);
type = typeId;
if(smsbody == null) smsbody = "";
Sms mSms = new Sms(name, phoneNumber, smsbody, tmDate, type,nThreadID,nID);
smsTotal.add(mSms);
}while(cur.moveToNext());
} else {
}
if (cur!=null) {
cur.close();
}
} catch(SQLiteException ex) {
Log.d("SQLiteException in getSmsInPhone", ex.getMessage());
}
if (smsTotal.bHasMms) {
LoadMmsItemsByThreadID(nThreadID, smsTotal);
SortSms(smsTotal.smsList);
}
}
public void LoadMmsItemsByThreadID(int nThreadID,SmsTotal smsTotal){
try{
ContentResolver cr = context.getContentResolver();
String[] projection = new String[]{MmsBase.ID, MmsBase.DATE,
MmsBase.SUBJECT,MmsBase.TYPE};
Uri uri = Uri.parse(MmsBase.MMS_URI_ALL);
String selection = MmsBase.THREAD_ID+" == "+nThreadID;
Cursor cur = cr.query(uri, projection, selection, null,MmsBase.DATE);
int nShows = 0;
if (cur.moveToFirst()) {
String name="";
String phoneNumber="";
int type;
long tmDate;
int nID = 0;
String subject="";
int idColumn = cur.getColumnIndex(MmsBase.ID);
int dateColumn = cur.getColumnIndex(MmsBase.DATE);
int subjectColumn = cur.getColumnIndex(MmsBase.SUBJECT);
int typeColumn = cur.getColumnIndex(MmsBase.TYPE);
do{
subject = cur.getString(subjectColumn);
String str="";
if (subject!=null) {
try {
str=new String(subject.getBytes("ISO8859_1"),"utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
subject = str;
tmDate = Long.parseLong(cur.getString(dateColumn));
tmDate*=1000;
nID =cur.getInt(idColumn);
type = cur.getInt(typeColumn);
Cursor cAddr = null;
//Cursor cPhones = null;
// try {
// //��ݲ���id��addr���в�������˵绰���룬�������msg_idӳ��pdu���id��
// String selectionAdd = new String("msg_id=" + nID );
// Uri uriAddr = Uri.parse("content://mms/" + nID + "/addr");
// //Uri uriAddr = Uri.parse("content://mms/addr");
// cAddr = cr.query(uriAddr, null, selectionAdd, null, null);
// //���addr���еĵ绰������phones���в��PERSON_ID,���PERSON_IDӳ��people���е�_id
//
// if(cAddr.moveToFirst()){//�ô���õ�2����¼����һ����¼Ϊ�����˺��룬�ڶ���Ϊ�������
// if (type == MmsBase.MESSAGE_BOX_SENT) {
// cAddr.moveToNext();
// }
// int nAddrColumn = cAddr.getColumnIndex("address");
// phoneNumber= cAddr.getString(nAddrColumn);
// }
// if (cAddr!=null) {
// cAddr.close();
// }
// } catch(SQLiteException ex) {
// Log.d("SQLiteException in getSmsInPhone", ex.getMessage());
// }
Mms mms = new Mms(name, smsTotal.phoneNumber, subject, tmDate, type, nThreadID,nID);
int nMssCount = smsTotal.nMmsCount;
mms.nPartID = nID;
// if (nMssCount<=3) {
// GetMMSPart(mms, nID);
// }else if(nShows>(nMssCount-4) && nShows>=0) {
// GetMMSPart(mms, nID);
// }
// if ((nShows>(smsTotal.nMmsCount-4)) && nShows>=0) {
//
// GetMMSPart(mms, nID);
// }
// else {
// GetMMSPart(mms, nID);
// }
nShows++;
smsTotal.add(mms);
}while(cur.moveToNext());
} else {
}
cur.close();
} catch(SQLiteException ex) {
Log.d("SQLiteException in getSmsInPhone", ex.getMessage());
}
}
public void GetMMsPartItem(SmsTotal smsTotal,int nPartID){
GetMMSPart(smsTotal.GetMMsByID(nPartID), nPartID);
}
public void GetMMSPart(Mms mms,int nID){
String selectionPart = new String("mid="+nID);//part���е�mid���Ϊpdu���е�_id
Uri uri = Uri.parse(MmsBase.MMS_URI_PART);
Cursor cPart = context.getContentResolver().query(uri, null,selectionPart,null, null);
int nTypeColm = cPart.getColumnIndex(MmsBase.PART_TYPE);
int nNameColm = cPart.getColumnIndex(MmsBase.PART_NAME_INSMIL);
int nTextColm = cPart.getColumnIndex(MmsBase.PART_TEXT);
int nSubID = cPart.getColumnIndex(MmsBase.ID);
String Type;
int nType;
String name;
String text;
String SubID;
while (cPart.moveToNext()) {
Type = cPart.getString(nTypeColm);
name = cPart.getString(nNameColm);
text = cPart.getString(nTextColm);
SubID = cPart.getString(nSubID);
if (Type.equals(MmsBase.STR_PART_TYPE_SMIL)) {
nType = MmsBase.PART_TYPE_SMIL;
ParseSmil(mms,text);
}else if (Type.equals(MmsBase.STR_PART_TYPE_TEXT)) {
nType = MmsBase.PART_TYPE_TEXT;
if (text==null) {
String strText = GetMMSText(SubID);
}
mms.Add(new MmsPart(nType, name, text, null));
}else if (Type.equals(MmsBase.STR_PART_TYPE_IMAGE_BMP)){
nType = MmsBase.PART_TYPE_IMAGE_BMP;
Bitmap bitmap = GetMMSImage(SubID);
mms.Add(new MmsPart(nType, name, text, bitmap));
}else if (Type.equals(MmsBase.STR_PART_TYPE_IMAGE_JPG)){
nType = MmsBase.PART_TYPE_IMAGE_JPG;
Bitmap bitmap = GetMMSImage(SubID);
mms.Add(new MmsPart(nType, name, text, bitmap));
}else if (Type.equals(MmsBase.STR_PART_TYPE_IMAGE_GIF)){
nType = MmsBase.PART_TYPE_IMAGE_GIF;
Bitmap bitmap = GetMMSImage(SubID);
mms.Add(new MmsPart(nType, name, text, bitmap));
}else if (Type.equals(MmsBase.STR_PART_TYPE_IMAGE_ALL)){
nType = MmsBase.PART_TYPE_IMAGE_ALL;
Bitmap bitmap = GetMMSImage(SubID);
mms.Add(new MmsPart(nType, name, text, bitmap));
}else {
nType = MmsBase.PART_TYPE_ERROR;
}
switch (nType) {
case MmsBase.PART_TYPE_SMIL:
break;
case MmsBase.PART_TYPE_IMAGE_BMP:
case MmsBase.PART_TYPE_IMAGE_JPG:
case MmsBase.PART_TYPE_IMAGE_ALL:
break;
case MmsBase.PART_TYPE_IMAGE_GIF:
break;
default:
break;
}
//break;
}
if (cPart!=null) {
cPart.close();
}
mms.bLoad=true;
}
public InputStream String2InputStream(String str){
ByteArrayInputStream stream = new ByteArrayInputStream(str.getBytes());
return stream;
}
public void ParseSmil(Mms mms,String strDate){
InputStream is = null;
is = String2InputStream(strDate);
try {
if(is!=null){
SmilXmlParser parser = new SmilXmlParser();
SMILDocument document;
try {
document = parser.parse(is);
if (document!=null) {
SMILElement element = document.getHead();
mms.smil = document;
}
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}catch (IOException e) {
e.printStackTrace();
Log.v(TAG, "��ȡ�����쳣"+e.getMessage());
}finally{
if (is != null){
try {
is.close();
}catch (IOException e){
Log.v(TAG, "��ȡ�����쳣"+e.getMessage());
}
}
}
}
public Bitmap GetMMSImage(String _id){
Uri partURI = Uri.parse("content://mms/part/" + _id );
ByteArrayOutputStream baos = new ByteArrayOutputStream();
InputStream is = null;
Bitmap bitmap=null;
try {
is = context.getContentResolver().openInputStream(partURI);
byte[] buffer = new byte[256];
int len = -1;
while ((len = is.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
bitmap = BitmapFactory.decodeByteArray(baos.toByteArray(), 0, baos.toByteArray().length);
}catch (IOException e) {
e.printStackTrace();
Log.v(TAG, "��ȡͼƬ�쳣"+e.getMessage());
}finally{
if (is != null){
try {
is.close();
}catch (IOException e){
Log.v(TAG, "��ȡͼƬ�쳣"+e.getMessage());
}
}
}
return bitmap;
}
public String GetMMSText(String _id){
Uri partURI = Uri.parse("content://mms/part/" + _id );
InputStream is = null;
StringBuilder sb = new StringBuilder();
try {
is = context.getContentResolver().openInputStream(partURI);
if(is!=null){
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8"));
String temp = reader.readLine();
while (temp != null) {
sb.append(temp);
temp=reader.readLine();//�����Ͽ����ܶ��InputStreamת��string�����£�û����ؼ��һ�䣬����ǧ��һ�ɵĸ���ճ��ô����������Ļ��ǻ��ڴ������
}
}
}catch (IOException e) {
e.printStackTrace();
Log.v(TAG, "��ȡ�����쳣"+e.getMessage());
}finally{
if (is != null){
try {
is.close();
}catch (IOException e){
Log.v(TAG, "��ȡ�����쳣"+e.getMessage());
}
}
}
return sb.toString();
}
public void SortSmsTotal(Vector<SmsTotal> list){
SmsTotalCompa compa = new SmsTotalCompa();
Collections.sort(list, compa);
}
public void SortSms(Vector<Sms> list){
SmsCompa compa = new SmsCompa();
Collections.sort(list, compa);
}
public SmsTotal GetSmsTotalByID(int nID){
SmsTotal smsTotal = null;
for (int i = 0; i < m_SmsList.size(); i++) {
smsTotal = m_SmsList.get(i);
if (smsTotal!=null) {
if (smsTotal.threadID == nID) {
return smsTotal;
}
}
}
return null;
}
public SmsTotal GetSmsTotalByName(String str){
SmsTotal smsTotal = null;
for (int i = 0; i < m_SmsList.size(); i++) {
smsTotal = m_SmsList.get(i);
if (smsTotal!=null) {
if (smsTotal.sContactName!=null && smsTotal.sContactName.equals(str)) {
return smsTotal;
}
}
}
return null;
}
public SmsTotal GetSmsTotalByNumber(String strNumber){
String strFix="";
if (strNumber.length()>3) {
if (strNumber.substring(0,3).equals("+86")) {
strFix = strNumber.substring(3);
};
}
SmsTotal smsTotal = null;
for (int i = 0; i < m_SmsList.size(); i++) {
smsTotal = m_SmsList.get(i);
if (smsTotal!=null) {
if (smsTotal.phoneNumber.equals(strFix)||
smsTotal.phoneNumber.equals(strNumber)) {
return smsTotal;
}
}
}
return null;
}
private void AddItem(SmsTotal smsTotal){
m_SmsList.add(smsTotal);
m_SmsMap.put(smsTotal.threadID, smsTotal);
if (smsTotal.sContactName!=null) {
m_SmsContactsList.add(smsTotal);
}
}
private SmsTotal FindItemByThreadID(int nThreadID){
return m_SmsMap.get(nThreadID);
}
public Vector<SmsTotal> m_SmsList;
public Vector<SmsTotal> m_SmsContactsList;
public Vector<SmsTotal> m_SmsNewList;
private Map<Integer, SmsTotal> m_SmsMap;
}