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);
}
}
}