package com.sogouchat.conversation; import com.sogouchat.R; import com.sogouchat.SogouChatApp; import com.sogouchat.smsmms.AutoTransEditView; import com.sogouchat.smsmms.Mms; import com.sogouchat.smsmms.Sms; import com.sogouchat.smsmms.SmsBase; import com.sogouchat.smsmms.SmsMgr; import com.sogouchat.smsmms.SmsTotal; import com.sogouchat.util.MessageDBHelper; import com.sogouchat.util.SmsFunc; import android.R.integer; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.ContextMenu; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ContextMenu.ContextMenuInfo; import android.view.View.OnClickListener; import android.view.View.OnCreateContextMenuListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; public class ConversationActivity extends Activity { public static final String STR_TYPE = "type"; public static final String STR_THREADID = "threadID"; public static final String STR_KEY = "key"; public static final String STR_NAME = "name"; public static final String STR_NUMBER ="number"; public static final String STR_SMSID ="ID"; public static final int TYPE_FROM_LIST = 1; public static final int TYPE_FROM_SEARCH = 2; public static final int TYPE_FROM_NEWMESSAGE = 3; private ListView msgListView = null; private Button mSendBtn = null; private SmsTotal mSmsTotal=null; private AutoTransEditView mSendEditText = null; private Handler mHandler = null; private TextView mTitleView = null; private int nState =-1; private int nID = -1; private String strSearchKey = null; /** Called when the activity is first created. */ private void InitView(){ setContentView(R.layout.conversation); RelativeLayout layout = (RelativeLayout)findViewById(R.id.titleLayout); mTitleView = (TextView)layout.findViewById(R.id.titletext); if (msgListView==null) { msgListView = (ListView)findViewById(R.id.sms_list); msgListView.setDividerHeight(0); } if (mSendEditText==null) { mSendEditText = (AutoTransEditView)findViewById(R.id.sms_input_text); } if (mSendBtn==null) { mSendBtn = (Button)findViewById(R.id.sms_send_btn); mSendBtn.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub OnSendMessage(); } }); } } private void InitView2(){ setContentView(R.layout.chat_main); mTitleView = (TextView)findViewById(R.id.text_title); if (msgListView==null) { msgListView = (ListView)findViewById(R.id.listview); msgListView.setDividerHeight(0); } if (mSendEditText==null) { mSendEditText = (AutoTransEditView)findViewById(R.id.et_sendmessage); } if (mSendBtn==null) { mSendBtn = (Button)findViewById(R.id.btn_send); mSendBtn.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub OnSendMessage(); } }); } Button mBtnBack = (Button) findViewById(R.id.btn_back); mBtnBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub finish(); } }); msgListView.setOnItemLongClickListener(new OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub final Sms sms = (Sms)arg0.getItemAtPosition(arg2); if (sms!=null) { mMenuSelectSms = sms; msgListView.setOnCreateContextMenuListener(new OnCreateContextMenuListener() { @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { // TODO Auto-generated method stub //menu.setHeaderTitle(sms.name); menu.add(0, 1, 1, "转发"); menu.add(0, 2, 2, "删除"); } }); } return false; } }); } private Sms mMenuSelectSms=null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mHandler = new ConversationActivityHandler(this); InitView2(); // TODO Auto-generated method stub if (getIntent()!=null) { int nState = getIntent().getIntExtra(STR_TYPE, -1); this.nState = nState; if (nState==TYPE_FROM_SEARCH) { String strKey = getIntent().getStringExtra(STR_KEY); strSearchKey = strKey; int nID = getIntent().getIntExtra(STR_SMSID, -1); this.nID = nID; } int nThreadID = getIntent().getIntExtra(STR_THREADID,-1); if (nThreadID!=-1) { mSmsTotal = SmsMgr.GetI().GetSmsTotalByID(nThreadID); if (mSmsTotal!=null) { //setTitle(mSmsTotal.GetName()); mTitleView.setText(mSmsTotal.GetName()); LoadMessageList(); } }else { String strNumber = getIntent().getStringExtra(STR_NUMBER); mSmsTotal = SmsMgr.GetI().GetSmsTotalByNumber(strNumber); if (mSmsTotal==null) { mSmsTotal = new SmsTotal(null, strNumber, null, 0, 0, 0 , 0,true); mTitleView.setText(mSmsTotal.GetTrueName()); }else { mTitleView.setText(mSmsTotal.GetTrueName()); LoadMessageList(); } } } } @Override protected void onDestroy() { // TODO Auto-generated method stub //getApp().LoadMessageListCancel(); mHandler.sendEmptyMessage(R.id.load_message_cancel); super.onDestroy(); } public SogouChatApp getApp(){ return (SogouChatApp)getApplication(); } private void LoadMessageList(){ Message msg = new Message(); msg.what = R.id.load_message_list; msg.obj = mHandler; msg.arg1 = mSmsTotal.threadID; mHandler.sendMessage(msg); //getApp().LoadMessageList(mSmsTotal, mHandler); } @Override public boolean onContextItemSelected(MenuItem item) { // TODO Auto-generated method stub switch (item.getItemId()) { case 1: if (mMenuSelectSms!=null) { Toast.makeText(getApplicationContext(), "Send TO"+mMenuSelectSms.smsbody, Toast.LENGTH_SHORT).show(); mMenuSelectSms = null; } break; case 2: if (mMenuSelectSms!=null) { MessageDBHelper.DeleteSmsByID(getApplicationContext(),mMenuSelectSms.ID); mSmsTotal.smsList.remove(mMenuSelectSms); ((BaseAdapter)msgListView.getAdapter()).notifyDataSetChanged(); mMenuSelectSms = null; } //Toast.makeText(getApplicationContext(), "Delete"+mMenuSelectSms.smsbody, Toast.LENGTH_SHORT).show(); break; default: break; } return super.onContextItemSelected(item); } public void InitList() { // TODO Auto-generated method stub SmsListAdapter listAdapter = new SmsListAdapter( mSmsTotal.smsList, getApp().getApplicationContext()); if (strSearchKey!=null) { listAdapter.strSearchKey= strSearchKey; } msgListView.setAdapter(listAdapter); if (nState == TYPE_FROM_SEARCH && nID!=-1) { for (int i = 0; i < mSmsTotal.smsList.size(); i++) { Sms sms = (Sms)mSmsTotal.smsList.get(i); if (sms.ID == nID) { msgListView.setSelection(i); break; } } }else { msgListView.setSelection(mSmsTotal.smsList.size()-1); } if (mSmsTotal.bHasMms) { SendMessageToLoadMmsItem(mSmsTotal.threadID,mSmsTotal.GetFirstMms().nPartID); } } private void OnSendMessage(){ String strContent = mSendEditText.getText().toString(); if (strContent!=null && !strContent.equals("")) { if (SmsFunc.sendSms(mSmsTotal.phoneNumber, strContent, ConversationActivity.this)) { Toast.makeText(ConversationActivity.this, "", Toast.LENGTH_SHORT).show(); //ReloadSmsList(); } Sms sms = new Sms(mSmsTotal.sContactName, mSmsTotal.phoneNumber, strContent, System.currentTimeMillis(), SmsBase.Sms_Type_Sent, mSmsTotal.threadID,0); mSmsTotal.add(sms); SmsListAdapter listAdapter = new SmsListAdapter(mSmsTotal.smsList, ConversationActivity.this); msgListView.setAdapter(listAdapter); msgListView.setSelection(mSmsTotal.smsList.size()-1); mSendEditText.setText(""); }else { Toast.makeText(ConversationActivity.this,"", Toast.LENGTH_SHORT).show(); } } public void SendMessageToLoadMmsItem(int threadID,int nPartID){ Message msg = new Message(); msg.what = R.id.load_message_mms_item; msg.obj = mHandler; msg.arg1 = threadID; msg.arg2 = nPartID; mHandler.sendMessage(msg); } public void Refresh(int arg1) { // TODO Auto-generated method stub ((BaseAdapter) msgListView.getAdapter()).notifyDataSetChanged(); Mms mms = mSmsTotal.GetNextMms(arg1); if (mms!=null) { SendMessageToLoadMmsItem(mSmsTotal.threadID,mms.nPartID); } } }