package net.cgt.weixin.activity;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import net.cgt.weixin.R;
import net.cgt.weixin.db.dao.ChatInfoDao;
import net.cgt.weixin.domain.ChatEmoji;
import net.cgt.weixin.domain.ChatMsgEntity;
import net.cgt.weixin.domain.User;
import net.cgt.weixin.utils.AppToast;
import net.cgt.weixin.utils.DensityUtil;
import net.cgt.weixin.utils.FaceConversionUtil;
import net.cgt.weixin.utils.HandlerTypeUtils;
import net.cgt.weixin.utils.L;
import net.cgt.weixin.utils.LogUtil;
import net.cgt.weixin.view.adapter.ChatMsgAdapter;
import net.cgt.weixin.view.adapter.EmojiAdapter;
import net.cgt.weixin.view.manager.XmppManager;
import net.cgt.weixin.view.scrollView.MyScrollView;
import net.cgt.weixin.view.scrollView.MyScrollView.IPageChangedListener;

import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.XMPPException;

import android.app.ActionBar;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Vibrator;
import android.support.v4.app.NavUtils;
import android.support.v4.app.TaskStackBuilder;
import android.text.Editable;
import android.text.SpannableString;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.view.WindowManager;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.AnimationUtils;
import android.view.animation.ScaleAnimation;
import android.view.inputmethod.InputMethodManager;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;

/**
 * 聊天
 * 
 * @author lijian
 * @date 2014-12-04
 */
public class ChatActivity extends BaseActivity implements OnItemClickListener {

	private static final String LOGTAG = LogUtil.makeLogTag(ChatActivity.class);

	protected static final int FLAG_RECEIVER = 100;
	private static final int CHATMSGENTITY_DATA_EMPTY = 2015010601;
	private static final int CHATMSGENTITY_DATA_FULL = 2015010602;

	/**
	 * 聊天用户
	 */
	private User user;

	//	/**
	//	 * 内容显示容器的外置滚动
	//	 */
	//	private ScrollView mSv_chat_showBoxScrollView;
	//	/**
	//	 * 内容显示容器
	//	 */
	//	private LinearLayout mLl_chat_showBox;

	/**
	 * 加载数据等待进度圈
	 */
	private ProgressBar mPb_chat_loading;
	/**
	 * 内容显示容器
	 */
	private ListView mLv_chat_showBox;
	/**
	 * 语音按钮
	 */
	private Button mBtn_chat_speech;
	/**
	 * 键盘按钮
	 */
	private Button mBtn_chat_keyboard;
	/**
	 * 输入框外置容器
	 */
	private LinearLayout mLl_chat_inputBox;
	/**
	 * 笑脸按钮
	 */
	private Button mBtn_chat_smilingface;
	/**
	 * 按住说话按钮
	 */
	private Button mBtn_chat_pressToTalk;
	/**
	 * 加号
	 */
	private Button mBtn_chat_plus;
	/**
	 * 文本输入框
	 */
	private EditText mEt_chat_input;
	/**
	 * 表情外边框
	 */
	private LinearLayout mLl_chat_smilingface_box;
	/**
	 * 表情内容体
	 */
	private LinearLayout mLl_chat_smilingface_body;
	/**
	 * 表情导航tab
	 */
	private RadioGroup mRg_chat_smilingface_tab;
	/**
	 * 发送按钮
	 */
	private Button mBtn_chat_send;
	/**
	 * 自定义ScrollView
	 */
	private MyScrollView mV_myScrollView;
	/**
	 * 表情集合
	 */
	private List<List<ChatEmoji>> mList_emoji;
	/**
	 * 表情页界面集合
	 */
	//	private ArrayList<View> pageViews;
	/**
	 * 表情数据填充器
	 */
	private List<EmojiAdapter> mList_emojiAdapter;
	/**
	 * 当前表情页
	 */
	private int current = 0;
	/**
	 * 表情页的监听事件
	 */
	private OnCorpusSelectedListener mListener;
	/**
	 * 震动传感器
	 */
	private Vibrator vibrator;
	/**
	 * 输入管理器
	 */
	private InputMethodManager imm;
	/**
	 * 输入框中的文本
	 */
	private String msg = "";
	/**
	 * 发送按钮show动画集
	 */
	private AnimationSet animationSet;
	/**
	 * 聊天消息实体的集合
	 */
	private List<ChatMsgEntity> mList_ChatMsgEntity;
	/**
	 * 消息适配器
	 */
	private ChatMsgAdapter mAdpt_chatMsg;
	/**
	 * 聊天信息数据库
	 */
	private ChatInfoDao dao;
	/**
	 * 是否正在加载数据中
	 */
	private boolean isLoading;
	/**
	 * 默认的开始位置
	 */
	private int startIndex = 0;
	/**
	 * 最多一次返回20条记录
	 */
	private int maxNumber = 20;
	/**
	 * 查询到的数据条数
	 */
	private int findChatMsgCount = 0;

	/**
	 * 表情选择监听
	 * 
	 * @author naibo-liao
	 * @时间: 2013-1-15下午04:32:54
	 */
	public interface OnCorpusSelectedListener {

		void onCorpusSelected(ChatEmoji emoji);

		void onCorpusDeleted();
	}

	/** 代码注册一个广播接收者(临时的) **/
	private BroadcastReceiver receiver = new BroadcastReceiver() {
		@Override
		public void onReceive(Context context, Intent intent) {
			String from = intent.getStringExtra("from");
			String body = intent.getStringExtra("body");
			L.i(LOGTAG, "receiver--->from=" + from + "---body=" + body);
			Message message = handler.obtainMessage();
			message.what = FLAG_RECEIVER;
			Bundle bundle = new Bundle();
			bundle.putString("from", from);
			bundle.putString("body", body);
			message.setData(bundle);
			message.sendToTarget();
		}
	};

	private Handler handler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case HandlerTypeUtils.WX_HANDLER_TYPE_LOAD_DATA_SUCCESS:
				setChatDataMe();
				break;
			case HandlerTypeUtils.WX_HANDLER_TYPE_LOAD_DATA_FAIL:
				AppToast.getToast().show("消息发送失败");
				break;
			case FLAG_RECEIVER:// 收到广播
				setChatDataOtherParty(msg);
				break;
			case CHATMSGENTITY_DATA_FULL:
				setData();
				break;
			case CHATMSGENTITY_DATA_EMPTY:
				mPb_chat_loading.setVisibility(View.GONE);
				AppToast.getToast().show("哦买噶,所有数据都被你取完啦...");
				isLoading = false;
				break;
			default:
				break;
			}
			super.handleMessage(msg);
		}

	};

	/**
	 * 刷新聊天数据
	 */
	private void setData() {
		mPb_chat_loading.setVisibility(View.GONE);
		if (mAdpt_chatMsg == null) {
			mAdpt_chatMsg = new ChatMsgAdapter(ChatActivity.this, mList_ChatMsgEntity);
			mLv_chat_showBox.setAdapter(mAdpt_chatMsg);
		} else {
			mAdpt_chatMsg.notifyDataSetChanged();
		}
		isLoading = false;
		if (findChatMsgCount > 0) {
			mLv_chat_showBox.setSelection(findChatMsgCount - 1);
		}
	}

	/**
	 * 设置对方聊天数据
	 * 
	 * @param msg
	 */
	private void setChatDataOtherParty(Message msg) {
		Bundle bundle = msg.getData();
		String body = bundle.getString("body");
		ChatMsgEntity chatMsgEntity = new ChatMsgEntity();

		// 当前时间
		long curTime = System.currentTimeMillis();
		chatMsgEntity.setTime(curTime);
		if (mList_ChatMsgEntity != null && mList_ChatMsgEntity.size() > 0) {
			//时间间隔
			long timeInterval = curTime - mList_ChatMsgEntity.get(mList_ChatMsgEntity.size() - 1).getTime();
			//5分钟内发送的不显示时间
			if (timeInterval > 5 * 60 * 1000) {
				chatMsgEntity.setShowTime(true);
			} else {
				chatMsgEntity.setShowTime(false);
			}
		} else {
			chatMsgEntity.setShowTime(true);
		}

		chatMsgEntity.setUserImg(Integer.parseInt(user.getUserPhote()));
		chatMsgEntity.setTextMsg(body);
		chatMsgEntity.setMsgType(ChatMsgEntity.MSGTYPE_TEXT);
		chatMsgEntity.setMeMsg(false);
		dao.add(chatMsgEntity);
		mList_ChatMsgEntity.add(chatMsgEntity);
		mAdpt_chatMsg.notifyDataSetChanged();
		mLv_chat_showBox.setSelection(mLv_chat_showBox.getCount() - 1);
	}

	/**
	 * 设置聊天窗口滚动到最底下
	 */
	//	private void setChatWindowToDown() {
	//		handler.post(new Runnable() {
	//			@Override
	//			public void run() {
	//				mSv_chat_showBoxScrollView.fullScroll(ScrollView.FOCUS_DOWN);
	//			}
	//		});
	//	}

	/**
	 * 设置我的聊天数据
	 */
	private void setChatDataMe() {
		mEt_chat_input.setText("");
		ChatMsgEntity chatMsgEntity = new ChatMsgEntity();

		// 当前时间
		long curTime = System.currentTimeMillis();
		chatMsgEntity.setTime(curTime);
		if (mList_ChatMsgEntity != null && mList_ChatMsgEntity.size() > 0) {
			//时间间隔
			long timeInterval = curTime - mList_ChatMsgEntity.get(mList_ChatMsgEntity.size() - 1).getTime();
			//5分钟内发送的不显示时间
			if (timeInterval > 5 * 60 * 1000) {
				chatMsgEntity.setShowTime(true);
			} else {
				chatMsgEntity.setShowTime(false);
			}
		} else {
			chatMsgEntity.setShowTime(true);
		}

		chatMsgEntity.setUserImg(R.drawable.user_picture);
		chatMsgEntity.setTextMsg(msg);
		chatMsgEntity.setMsgType(ChatMsgEntity.MSGTYPE_TEXT);
		chatMsgEntity.setMeMsg(true);
		dao.add(chatMsgEntity);
		mList_ChatMsgEntity.add(chatMsgEntity);
		mAdpt_chatMsg.notifyDataSetChanged();
		//滚动到最底部:方式一
		//		mLv_chat_showBox.setSelection(mLv_chat_showBox.getCount() - 1);
		//滚动到最底部:方式二
		mLv_chat_showBox.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
	}

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

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.cgt_activity_chat);
		//隐藏软体键盘
		getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
		Intent intent = this.getIntent();
		user = intent.getParcelableExtra("user");
		init();
	}

	private void init() {
		initView();
		initData();
	}

	private void initView() {
		ActionBar actionBar = getActionBar();
		actionBar.setDisplayHomeAsUpEnabled(true);
		actionBar.setDisplayShowHomeEnabled(false);
		actionBar.setDisplayShowTitleEnabled(true);
		actionBar.setTitle(user.getUserAccount());
		setOverflowShowingAlways();

		//		mSv_chat_showBoxScrollView = (ScrollView) findViewById(R.id.cgt_sv_chat_showBoxScrollView);
		//		mLl_chat_showBox = (LinearLayout) findViewById(R.id.cgt_ll_chat_showBox);
		mLv_chat_showBox = (ListView) findViewById(R.id.cgt_lv_chat_showBox);
		mPb_chat_loading = (ProgressBar) findViewById(R.id.cgt_pb_chat_loading);
		mBtn_chat_speech = (Button) findViewById(R.id.cgt_btn_chat_speech);
		mBtn_chat_keyboard = (Button) findViewById(R.id.cgt_btn_chat_keyboard);
		mLl_chat_inputBox = (LinearLayout) findViewById(R.id.cgt_ll_chat_input_box);
		mEt_chat_input = (EditText) findViewById(R.id.cgt_et_chat_input);
		mBtn_chat_smilingface = (Button) findViewById(R.id.cgt_btn_chat_smilingface);
		mBtn_chat_pressToTalk = (Button) findViewById(R.id.cgt_btn_chat_pressToTalk);
		mBtn_chat_plus = (Button) findViewById(R.id.cgt_btn_chat_plus);
		mBtn_chat_send = (Button) findViewById(R.id.cgt_btn_chat_send);

		mLl_chat_smilingface_box = (LinearLayout) findViewById(R.id.cgt_ll_chat_smilingface_box);
		mLl_chat_smilingface_body = (LinearLayout) findViewById(R.id.cgt_ll_chat_smilingface_body);
		mRg_chat_smilingface_tab = (RadioGroup) findViewById(R.id.cgt_rg_chat_smilingface_tab);

		mBtn_chat_speech.setOnClickListener(this);
		mBtn_chat_keyboard.setOnClickListener(this);
		mBtn_chat_smilingface.setOnClickListener(this);
		mBtn_chat_pressToTalk.setOnClickListener(this);
		mBtn_chat_plus.setOnClickListener(this);
		mBtn_chat_send.setOnClickListener(this);
		mLv_chat_showBox.setOnScrollListener(new OnScrollListener() {
			// 当滚动状态发生变化的时候调用的方法。
			// 静止--》拖动滚动
			// 拖动--》惯性滑动
			// 滑动--》静止
			@Override
			public void onScrollStateChanged(AbsListView view, int scrollState) {
				switch (scrollState) {
				case OnScrollListener.SCROLL_STATE_IDLE://静止状态
					int position = mLv_chat_showBox.getFirstVisiblePosition();//获取第一条可见条目在listView集合里面的位置
					if (position == 0) {
						if (isLoading) {
							AppToast.getToast().show("正在加载,请稍候...");
							return;
						}
						startIndex += maxNumber;
						fillData();
					}
					break;

				case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL://触摸滚动状态
					L.i(LOGTAG, "触摸滚动状态");
					break;
				case OnScrollListener.SCROLL_STATE_FLING://惯性滚动状态
					L.i(LOGTAG, "惯性滚动状态");
					break;
				}
			}

			@Override
			public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
			}
		});
	}

	/**
	 * 获取并填充聊天数据
	 */
	private void fillData() {
		isLoading = true;
		mPb_chat_loading.setVisibility(View.VISIBLE);
		new Thread() {
			public void run() {
				List<ChatMsgEntity> list = dao.findPart(maxNumber, startIndex);
				findChatMsgCount = list.size();
				if (list.size() != 0) {
					if (mList_ChatMsgEntity == null) {
						mList_ChatMsgEntity = list;
					} else {
						mList_ChatMsgEntity.addAll(0, list);
					}
					handler.sendEmptyMessage(CHATMSGENTITY_DATA_FULL);
				} else {
					handler.sendEmptyMessage(CHATMSGENTITY_DATA_EMPTY);
				}
			};
		}.start();
	}

	private void initData() {
		imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
		vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
		IntentFilter filter = new IntentFilter("net.cgt.weixin.chat");
		registerReceiver(receiver, filter);// 注册一个广播接收者

		Animation sa = new ScaleAnimation(0.8f, 1.0f, 0.8f, 1.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
		Animation aa = new AlphaAnimation(0.1f, 1.0f);
		animationSet = new AnimationSet(true);
		animationSet.addAnimation(aa);
		animationSet.addAnimation(sa);
		animationSet.setDuration(100);
		mEt_chat_input.addTextChangedListener(watcher);
		mEt_chat_input.setOnClickListener(this);

		setSmilingfaceData();

		mList_ChatMsgEntity = new ArrayList<ChatMsgEntity>();
		dao = new ChatInfoDao(this);

		fillData();

		//		List<ChatMsgEntity> findPart = dao.findPart(maxNumber, startIndex);
		//		mList_ChatMsgEntity.addAll(findPart);
		//		mAdpt_chatMsg = new ChatMsgAdapter(this, mList_ChatMsgEntity);
		//		mLv_chat_showBox.setAdapter(mAdpt_chatMsg);
	}

	/**
	 * 设置笑脸被点击后的表情数据
	 */
	private void setSmilingfaceData() {
		mV_myScrollView = new MyScrollView(this);
		mList_emoji = FaceConversionUtil.getInstace().emojiLists;

		// 添加表情页
		mList_emojiAdapter = new ArrayList<EmojiAdapter>();
		mV_myScrollView.removeAllViews();
		for (int i = 0; i < mList_emoji.size(); i++) {
			//			GridView的一些特殊属性:
			//
			//			1.android:numColumns=”auto_fit”   //GridView的列数设置为自动
			//			2.android:columnWidth=”90dp "       //每列的宽度,也就是Item的宽度
			//			3.android:stretchMode=”columnWidth"//缩放与列宽大小同步
			//			4.android:verticalSpacing=”10dp”          //两行之间的边距
			//			5.android:horizontalSpacing=”10dp”      //两列之间的边距 
			//			6.android:cacheColorHint="#00000000" //去除拖动时默认的黑色背景
			//			7.android:listSelector="#00000000"        //去除选中时的黄色底色
			//			8.android:scrollbars="none"                   //隐藏GridView的滚动条
			//			9.android:fadeScrollbars="true"             //设置为true就可以实现滚动条的自动隐藏和显示
			//			10.android:fastScrollEnabled="true"      //GridView出现快速滚动的按钮(至少滚动4页才会显示)
			//			11.android:fadingEdge="none"                //GridView衰落(褪去)边缘颜色为空,缺省值是vertical。(可以理解为上下边缘的提示色)
			//			12.android:fadingEdgeLength="10dip"   //定义的衰落(褪去)边缘的长度
			//			13.android:stackFromBottom="true"       //设置为true时,你做好的列表就会显示你列表的最下面
			//			14.android:transcriptMode="alwaysScroll" //当你动态添加数据时,列表将自动往下滚动最新的条目可以自动滚动到可视范围内
			//			15.android:drawSelectorOnTop="false"  //点击某条记录不放,颜色会在记录的后面成为背景色,内容的文字可见(缺省为false)
			//			
			GridView view = new GridView(this);
			EmojiAdapter adapter = new EmojiAdapter(this, mList_emoji.get(i));
			view.setAdapter(adapter);
			mList_emojiAdapter.add(adapter);
			view.setOnItemClickListener(this);
			view.setNumColumns(7);
			view.setBackgroundColor(Color.TRANSPARENT);
			//			view.setHorizontalSpacing(1); //两列之间的边距
			//			view.setVerticalSpacing(10);//两行之间的边距
			view.setStretchMode(GridView.STRETCH_COLUMN_WIDTH);//缩放与列宽大小同步
			view.setCacheColorHint(0);//去除拖动时默认的黑色背景
			//						view.setPadding(5, 5, 5, 5);
			view.setSelector(new ColorDrawable(Color.TRANSPARENT));
			LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
			view.setLayoutParams(params);
			view.setGravity(Gravity.CENTER);
			mV_myScrollView.addView(view);
		}

		mLl_chat_smilingface_body.removeAllViews();
		mLl_chat_smilingface_body.addView(mV_myScrollView);//将MyScrollView添加到内容显示区

		RadioGroup.LayoutParams params_rb = new RadioGroup.LayoutParams(DensityUtil.dip2px(this, 8), DensityUtil.dip2px(this, 8));
		int marginValue = DensityUtil.dip2px(this, 3);
		params_rb.setMargins(marginValue, 0, marginValue, 0);
		for (int i = 0; i < mV_myScrollView.getChildCount(); i++) {
			RadioButton rbtn = new RadioButton(this);
			rbtn.setButtonDrawable(R.drawable.cgt_selector_chat_radiobtn_bg);
			rbtn.setId(i);
			mRg_chat_smilingface_tab.addView(rbtn, params_rb);
			if (i == 0) {
				rbtn.setChecked(true);
			}
		}
		/**
		 * 监听单选按钮是否被选中,
		 */
		mRg_chat_smilingface_tab.setOnCheckedChangeListener(new OnCheckedChangeListener() {

			@Override
			public void onCheckedChanged(RadioGroup group, int checkedId) {
				current = checkedId;
				mV_myScrollView.moveToDest(checkedId);
			}
		});

		/**
		 * 
		 */
		mV_myScrollView.setChangedListener(new IPageChangedListener() {

			@Override
			public void changedTo(int pageId) {
				current = pageId;
				((RadioButton) mRg_chat_smilingface_tab.getChildAt(pageId)).setChecked(true);
			}
		});
	}

	/**
	 * 输入框文本改变监听器
	 */
	TextWatcher watcher = new TextWatcher() {

		@Override
		public void onTextChanged(CharSequence s, int start, int before, int count) {
			L.d(LOGTAG, "onTextChanged--->s=" + s + "---start=" + start + "---before=" + before + "---count=" + count);
		}

		@Override
		public void beforeTextChanged(CharSequence s, int start, int count, int after) {
			// TODO s-->在输入文本前,文本框中已有的文本内容
			// start-->当前输入的文本的角标
			// count-->
			// after-->输入的文本长度
			L.d(LOGTAG, "beforeTextChanged--->s=" + s + "---start=" + start + "---count=" + count + "---after=" + after);
			if (s.toString().isEmpty()) {
				mBtn_chat_plus.setVisibility(View.GONE);
				mBtn_chat_send.setVisibility(View.VISIBLE);
				mBtn_chat_send.startAnimation(animationSet);
			}
		}

		@Override
		public void afterTextChanged(Editable s) {
			// TODO s-->刚刚输入的文本
			L.d(LOGTAG, "afterTextChanged--->s.toString()=" + s.toString());
			if (s.toString().isEmpty()) {
				mBtn_chat_plus.setVisibility(View.VISIBLE);
				mBtn_chat_send.setVisibility(View.GONE);
				mBtn_chat_plus.startAnimation(animationSet);
			}
		}
	};

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.cgt_btn_chat_speech:// 语音按钮
			mBtn_chat_speech.setVisibility(View.GONE);
			mBtn_chat_keyboard.setVisibility(View.VISIBLE);
			mBtn_chat_pressToTalk.setVisibility(View.VISIBLE);
			mLl_chat_inputBox.setVisibility(View.GONE);
			break;
		case R.id.cgt_btn_chat_keyboard:// 键盘按钮
			mBtn_chat_speech.setVisibility(View.VISIBLE);
			mBtn_chat_keyboard.setVisibility(View.GONE);
			mBtn_chat_pressToTalk.setVisibility(View.GONE);
			mLl_chat_inputBox.setVisibility(View.VISIBLE);
			break;
		case R.id.cgt_btn_chat_smilingface:// 笑脸按钮
			if (mLl_chat_smilingface_box.getVisibility() == View.VISIBLE) {
				imm.showSoftInput(mEt_chat_input, 0);
				mLl_chat_smilingface_box.setVisibility(View.GONE);
				mBtn_chat_smilingface.setBackgroundResource(R.drawable.cgt_chat_input_smilingface_nor);
			} else {
				imm.hideSoftInputFromWindow(mEt_chat_input.getWindowToken(), 0);
				mLl_chat_smilingface_box.setVisibility(View.VISIBLE);
				mBtn_chat_smilingface.setBackgroundResource(R.drawable.cgt_chat_input_smilingface_sel);
			}
			break;
		case R.id.cgt_btn_chat_pressToTalk:// 按住说话

			break;
		case R.id.cgt_btn_chat_plus:// 加号

			break;
		case R.id.cgt_btn_chat_send://发送按钮
			if (checkValidity()) {
				sendMsg();
			}
			break;

		case R.id.cgt_et_chat_input:// 输入框被点击
			if (mLl_chat_smilingface_box.getVisibility() == View.VISIBLE) {
				imm.showSoftInput(mEt_chat_input, 0);
				mLl_chat_smilingface_box.setVisibility(View.GONE);
				mBtn_chat_smilingface.setBackgroundResource(R.drawable.cgt_chat_input_smilingface_nor);
			}
			break;

		default:
			break;
		}
	}

	/**
	 * 检查合法性
	 * 
	 * @return
	 */
	private boolean checkValidity() {
		msg = mEt_chat_input.getText().toString().trim();
		if (TextUtils.isEmpty(msg)) {
			mEt_chat_input.requestFocus();
			AppToast.getToast().show("发送消息不能为空");
			Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake);
			mEt_chat_input.startAnimation(shake);
			vibrator.vibrate(300);
			return false;
		}
		return true;
	}

	/**
	 * 发送消息
	 */
	private void sendMsg() {
		new Thread(new Runnable() {

			@Override
			public void run() {
				Chat chat = XmppManager.getInstance().getFriendChat(user.getUserAccount(), null);

				//	friend为好友名,不是JID;listener 监听器可以传null,利用聊天窗口对象调用sendMessage发送消息
				//	这里sendMessage我传的是一个JSON字符串,以便更灵活的控制,发送消息完成~
				try {
					// String msgjson = "{\"messageType\":\""+messageType+"\",\"chanId\":\""+chanId+"\",\"chanName\":\""+chanName+"\"}";
					// chat.sendMessage(msgjson);

					chat.sendMessage(msg);
					handler.sendEmptyMessage(HandlerTypeUtils.WX_HANDLER_TYPE_LOAD_DATA_SUCCESS);
				} catch (XMPPException e) {
					handler.sendEmptyMessage(HandlerTypeUtils.WX_HANDLER_TYPE_LOAD_DATA_FAIL);
					e.printStackTrace();
				}
			}
		}).start();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.cgt_menu_chat, menu);
		return super.onCreateOptionsMenu(menu);
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case android.R.id.home://返回上一菜单页
			AppToast.getToast().show("返回上一页");
			Intent upIntent = NavUtils.getParentActivityIntent(this);
			if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
				TaskStackBuilder.create(this).addNextIntentWithParentStack(upIntent).startActivities();
			} else {
				upIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
				NavUtils.navigateUpTo(this, upIntent);
			}
			break;
		case R.id.menu_chat_chatInfo:
			AppToast.getToast().show(R.string.text_menu_chatInfo);
			break;
		default:
			break;
		}
		return super.onOptionsItemSelected(item);
	}

	@Override
	public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
		ChatEmoji emoji = (ChatEmoji) mList_emojiAdapter.get(current).getItem(position);
		if (emoji.getId() == R.drawable.cgt_selector_chat_emoji_del_bg) {//如果是删除按钮
			int selection = mEt_chat_input.getSelectionStart();//获取光标所在位置
			//			String text = mEt_chat_input.getText().toString();//获取输入框中的文本
			String text = mEt_chat_input.getText().toString().substring(0, selection);//获取光标之前的所有文本
			if (selection > 0) {//如果光标位置大于零,表示有输入文字
				String text2 = text.substring(selection - 1);//获取光标位置的最后一个字符
				if ("]".equals(text2)) {//判断该字符是否为"]"
					int start = text.lastIndexOf("[");//获取最后
					int end = selection;
					mEt_chat_input.getText().delete(start, end);
					return;
				}
				mEt_chat_input.getText().delete(selection - 1, selection);
			}
		}
		if (!TextUtils.isEmpty(emoji.getDescription())) {
			if (mListener != null)
				mListener.onCorpusSelected(emoji);
			SpannableString spannableString = FaceConversionUtil.getInstace().addFace(this, emoji.getId(), emoji.getDescription());
			mEt_chat_input.append(spannableString);
		}
	}

	public void setOnCorpusSelectedListener(OnCorpusSelectedListener listener) {
		mListener = listener;
	}
}