package com.sogouchat.ui;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.sogouchat.R;
import com.sogouchat.SogouChatApp;
import com.sogouchat.bean.MsgNode;
import com.sogouchat.os.ChatAppConstant;
import com.sogouchat.ui.ChatMsgViewAdapter.IMsgContentType;
import com.sogouchat.ui.ChatMsgViewAdapter.IMsgViewType;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Intent;
import android.graphics.Rect;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.LevelListDrawable;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnErrorListener;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.text.Editable;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class ChatListActivity extends Activity implements OnClickListener, OnCompletionListener, OnErrorListener {
private Button mBtnSend;
private Button mBtnBack;
private EditText mEditTextContent;
private TextView mTitle;
private ListView mListView;
private String mTel;
private String mName;
private ChatMsgViewAdapter mAdapter;
private SogouChatApp mApp;
private SmsManager mSmsMgr = SmsManager.getDefault();
private boolean mIsShown=false;
private MediaPlayer mMediaPlayer;
private boolean mIsPlaying;
AnimationDrawable mPlayAnim;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.chat_main);
initView();
mApp = (SogouChatApp) getApplication();
mApp.mChatList = this;
mAdapter = new ChatMsgViewAdapter(this, mApp);
mListView.setAdapter(mAdapter);
Intent in = getIntent();
mTel = in.getExtras().getString("tel");
mName = in.getExtras().getString("name");
mAdapter.setChatTel(mTel);
mTitle.setText(mName);
mListView.setSelection(mAdapter.getCount());
}
public void onResume(){
super.onResume();
mIsShown = true;
}
public void onPause(){
super.onPause();
mIsShown = false;
if (mMediaPlayer != null) {
mMediaPlayer.release();
mMediaPlayer = null;
}
}
public void onDestory(){
super.onDestroy();
if (mMediaPlayer != null) {
mMediaPlayer.release();
mMediaPlayer = null;
}
}
public void initView() {
mTitle = (TextView)findViewById(R.id.text_title);
mListView = (ListView) findViewById(R.id.listview);
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
ListView listView = (ListView)parent;
ChatMsgEntity item = (ChatMsgEntity)listView.getItemAtPosition(position);
if (item.mType == IMsgContentType.MSG_IMAGE) {
if (!item.mLoad){
mApp.sendSrvForeMsg(
ChatAppConstant.SRV_ForeMsg_Down_Msg,
item.mShortUrl,
item.mDate+".png");
}
else{
Intent intent = new Intent(Intent.ACTION_VIEW);
String filePath = Environment.getExternalStorageDirectory() + ChatAppConstant.SAVE_PATH
+ item.mDate+".png";
File file = new File(filePath);
intent.setDataAndType(Uri.fromFile(file), "image/*");
startActivity(intent);
}
}
else if (item.mType == IMsgContentType.MSG_AUDIO) {
if (!item.mLoad){
mApp.sendSrvForeMsg(
ChatAppConstant.SRV_ForeMsg_Down_Msg,
item.mShortUrl,
item.mDate+".mp3");
}
else{
// play mp3
// Intent intent = new Intent(Intent.ACTION_VIEW);
// intent.setDataAndType(Uri.fromFile(file), "audio/mp3");
// startActivity(intent);
String filePath = Environment.getExternalStorageDirectory() + ChatAppConstant.SAVE_PATH
+ item.mDate+".mp3";
try {
if (mMediaPlayer != null){
mMediaPlayer.release();
}
mMediaPlayer= new MediaPlayer();
mMediaPlayer.setOnErrorListener(ChatListActivity.this);
mMediaPlayer.setOnCompletionListener(ChatListActivity.this);
mMediaPlayer.setDataSource(filePath);
mMediaPlayer.prepare();
mMediaPlayer.start();
mIsPlaying = true;
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//play animation
if (mPlayAnim!=null &&mPlayAnim.isRunning()){
mPlayAnim.stop();
}
ImageView imageView = (ImageView) view.findViewById(R.id.img_chatcontent);
imageView.setImageResource(R.anim.chathistory_receive_voice_spk);
mPlayAnim = (AnimationDrawable) imageView.getDrawable();
Rect bounds = new Rect(0, 0, 54, 62);
mPlayAnim.setBounds(bounds);
mPlayAnim.start();
}
}
}
});
mBtnSend = (Button) findViewById(R.id.btn_send);
mBtnSend.setOnClickListener(this);
mBtnBack = (Button) findViewById(R.id.btn_back);
mBtnBack.setOnClickListener(this);
mEditTextContent = (EditText) findViewById(R.id.et_sendmessage);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.btn_send:
send();
break;
case R.id.btn_back:
finish();
break;
}
}
private void send() {
String body = mEditTextContent.getText().toString();
if (body.length() > 0) {
ChatMsgEntity entity = new ChatMsgEntity();
entity.mDate = System.currentTimeMillis();
entity.mName = mName;
entity.mCome = IMsgViewType.MSG_TO;
// entity.setContent(body);
// to down it
if (entity.mType == IMsgContentType.MSG_IMAGE){
mApp.sendSrvForeMsg(
ChatAppConstant.SRV_ForeMsg_Down_Msg,
entity.mShortUrl,
entity.mDate+".png");
}
else if (entity.mType == IMsgContentType.MSG_AUDIO){
mApp.sendSrvForeMsg(
ChatAppConstant.SRV_ForeMsg_Down_Msg,
entity.mShortUrl,
entity.mDate+".mp3");
}
mAdapter.mData.add(entity);
mAdapter.notifyDataSetChanged();
mEditTextContent.setText("");
mListView.setSelection(mAdapter.getCount());
mApp.sendSms(mTel, body, entity.mDate);
}
}
private String getDate() {
Calendar c = Calendar.getInstance();
String year = String.valueOf(c.get(Calendar.YEAR));
String month = String.valueOf(c.get(Calendar.MONTH));
String day = String.valueOf(c.get(Calendar.DAY_OF_MONTH) + 1);
String hour = String.valueOf(c.get(Calendar.HOUR_OF_DAY));
String mins = String.valueOf(c.get(Calendar.MINUTE));
StringBuffer sbBuffer = new StringBuffer();
sbBuffer.append(year + "-" + month + "-" + day + " " + hour + ":"
+ mins);
return sbBuffer.toString();
}
public void handleSrvMsg(int msg, Bundle bundle){
switch(msg){
case ChatAppConstant.SRV_BackMsg_File_Down_Ok:
{
String file = bundle.getString("File");
updateItemViewByFile(file.substring(0, file.length()-4));
}
break;
case ChatAppConstant.SRV_BackMsg_New_Sms:
{
mAdapter.updateNewMsgList();
mListView.setSelection(mAdapter.getCount());
mAdapter.notifyDataSetChanged();
}
break;
default:
break;
}
}
private void updateItemViewByFile(String file) {
for (int i = 0; i < mAdapter.getCount(); i++) {
ChatMsgEntity item = (ChatMsgEntity) mAdapter.getItem(i);
if (file.equals(String.valueOf(item.mDate))) {
if (item.mType >= IMsgContentType.MSG_IMAGE) {
// MediaMetadataRetriever mmr = new MediaMetadataRetriever();
// mmr.setDataSource(file);
// String albumName = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM);
mAdapter.notifyDataSetChanged();
}
}
}
}
public boolean isShown() {
return mIsShown;
}
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
// TODO Auto-generated method stub
mMediaPlayer.reset();
if (mPlayAnim.isRunning()){
mPlayAnim.stop();
}
return false;
}
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
mIsPlaying = false;
mMediaPlayer.release();
if (mPlayAnim.isRunning()){
mPlayAnim.stop();
}
}
public void setDraft(String draft){
mEditTextContent.setText(draft);
}
}