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