package com.ztspeech.simutalk2.weixinchat; import java.util.ArrayList; import java.util.List; import android.annotation.SuppressLint; import android.app.Activity; import android.app.ProgressDialog; import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnKeyListener; import android.view.Window; import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import com.tencent.mm.sdk.openapi.GetMessageFromWX; import com.tencent.mm.sdk.openapi.IWXAPI; import com.tencent.mm.sdk.openapi.WXAPIFactory; import com.tencent.mm.sdk.openapi.WXMediaMessage; import com.tencent.mm.sdk.openapi.WXTextObject; import com.ztspeech.recognizer.EngineResultFlag; import com.ztspeech.recognizer.OnEngineListener; import com.ztspeech.recognizerDialog.UnisayRecognizerDialog; import com.ztspeech.simutalk2.R; import com.ztspeech.simutalk2.data.UserInfo; import com.ztspeech.simutalk2.dictionary.util.LogInfo; import com.ztspeech.simutalk2.dictionary.util.PublicArithmetic; import com.ztspeech.simutalk2.dictionary.util.Util; import com.ztspeech.simutalk2.net.PostPackageEngine; import com.ztspeech.simutalk2.qa.PostVoiceDataToServerEngine; import com.ztspeech.simutalk2.qa.WaitingActivity; import com.ztspeech.simutalk2.qa.view.InterpretView; import com.ztspeech.translator.Translator; @SuppressLint("NewApi") public class WchatActivity extends Activity implements OnClickListener { // Intent param define public static final int TYPE_NEW = 1; public static final int TYPE_OLD = 2; // view control private EditText mEditMsg; private Button mBtnSend; private Button mBtnSpeak; private Button mBtnCancel; private Button mBtnChOrEn; private boolean isSpeaking; public static boolean isWorking = false; private UnisayRecognizerDialog mDialog = null; private ProgressDialog dialog; private Translator mTranslater; private UserInfo mUser = UserInfo.getInstanse(); private int mVoiceLength = 0; private static String language; private PostVoiceDataToServerEngine mPostVoiceDataToServerEngine; private Context context; private PostPackageEngine mPostPackageEngine; protected boolean mMessageChanged = true; private Translator translator; private InterpretView2 mInterpretView; private Handler handler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case Util.ON_RECORD_END: mInterpretView.clearNoVoiceAnim(); mInterpretView.clearViewAnim(); mInterpretView.startViewAnim(); mInterpretView.setBtnRecordEnable(false); break; case Util.ON_RECORD_BEGIN: mInterpretView.clearViewAnim(); mInterpretView.startNoVoiceAnim(); // btnDispProcess(true); mInterpretView.setBtnRecordEnable(true); break; case Util.ON_RECORDER_ERROR: mInterpretView.clearViewAnim(); mInterpretView.setBtnRecordEnable(true); break; case Util.ON_WAIT_BEGIN: mInterpretView.setBtnRecordEnable(false); mInterpretView.clearViewAnim(); mInterpretView.startViewAnim(); break; case Util.ON_WAIT_END: mInterpretView.setBtnRecordEnable(true); // btnDispProcess(false); mInterpretView.clearViewAnim(); break; case Util.ON_RECOGNIZER_ERROR: mInterpretView.clearViewAnim(); mInterpretView.setBtnRecordEnable(true); mInterpretView.setTextStatusDisp(View.VISIBLE); mDialog.close(); mInterpretView.setTextStatus((Integer) msg.obj); setBtnEnable(true); break; case Util.ON_VOICE_VALUE: mInterpretView.clearViewAnim(); mInterpretView.setBtnRecordEnable(false); int value = (Integer) msg.obj; mInterpretView.setBtnRecordBg(value); break; case Util.SET_LIST_VIEW: mInterpretView.setBtnRecordEnable(true); mInterpretView.clearViewAnim(); mDialog.close(); mInterpretView.dispRresultList((ArrayList<String>) msg.obj); break; case Util.SELECT_RESULT: break; case 100: Toast.makeText(context, context.getString(R.string.cancelnet), Toast.LENGTH_LONG).show(); mPostVoiceDataToServerEngine.dismissLoading(); break; case 101: Toast.makeText(context, context.getString(R.string.qa_msg_download_error), Toast.LENGTH_LONG).show(); mPostVoiceDataToServerEngine.dismissLoading(); break; case 102: LogInfo.LogOutE("haitian", "AskQuestionActivity>>>>>>>>>>>>>>>>>>> msg.obj =" + (String) msg.obj); //postVoiceDataCallBack((String) msg.obj); break; case 104: mPostVoiceDataToServerEngine.dismissLoading(); LogInfo.LogOutE("haitian", "AskQuestionActivity>>>>>>>>>>>>>>>>>>> dismissLoading"); break; case 200: //postPackageCallBack((ResultPackage) msg.obj); break; case 404: Toast.makeText(context, (String) msg.obj, Toast.LENGTH_LONG).show(); break; default: break; } }; }; private void btnDispProcess(boolean flag) { if (flag) { mInterpretView.setBtnCancelDisp(View.VISIBLE); } else { mInterpretView.setBtnCancelDisp(View.GONE); } } private boolean btnClickflag = false; private LayoutInflater inflater; private IWXAPI iapi; //private UserInfo userInfo = UserInfo.getInstanse(); Bundle bundle; ///private SpeakAdapter mSpeakAdapter; // ========================================================= @Override public void onCreate(Bundle savedInstanceState) { overridePendingTransition(R.anim.popmore_show, R.anim.popmore_exit); //popMore.setAnimationStyle(R.style.popMoreAnimation); super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View v = inflater.inflate(R.layout.activity_chat, null); setContentView(v); iapi = WXAPIFactory.createWXAPI(this, Constants.APP_ID, false); this.bundle = getIntent().getExtras(); context = this; mInterpretView = new InterpretView2(this, handler ,v , this); mDialog = new UnisayRecognizerDialog(this, "", mRecognizerListener, mInterpretView.mNewRecognizerViewListenerInterface); translator = new Translator(this, mTranslaterListener); mPostVoiceDataToServerEngine = new PostVoiceDataToServerEngine(context, handler); mBtnSend = (Button) findViewById(R.id.btnSend); mBtnCancel = (Button) findViewById(R.id.btnCancel); mBtnSpeak = (Button) findViewById(R.id.btnSpeak); mEditMsg = (EditText) findViewById(R.id.editMsg); language = mUser.s2sType; if (language.equals(UserInfo.S2T_EN2CH)) { //mBtnChOrEn.setBackgroundResource(R.drawable.qa_btn_z_f); //mDialog.setToChineseEngine(); mDialog.setToEN2CHEngine(); } else{ //mBtnChOrEn.setBackgroundResource(R.drawable.qa_btn_e_f); //mDialog.setToEnglishEngine(); mDialog.setToCH2ENEngine(); } mBtnSend.setOnClickListener(this); mBtnSpeak.setOnClickListener(this); mBtnCancel.setOnClickListener(this); mEditMsg.setOnKeyListener(mEditInputTextKeyListener); onClick(mBtnSpeak); } private OnKeyListener mEditInputTextKeyListener = new OnKeyListener() { public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == 66) { transInputText(); } return false; } }; @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { mDialog.close(); mInterpretView.setRecordLayoutDisp(View.GONE); setBtnEnable(true); } return super.onKeyDown(keyCode, event); } private OnEngineListener mRecognizerListener = new OnEngineListener() { public void onEngineResult(List list, int flag, String id) { mDialog.close(); mInterpretView.setRecordLayoutDisp(View.GONE); setBtnEnable(true); if (list == null) { mVoiceLength = 0; return; } if (list.size() > 1) { mEditMsg.setText((String) list.get(0)+"\n"+(String) list.get(1)); sendMsg(); } } public void onEngineStart() { // TODO Auto-generated method stub } public void onEngineEnd() { setBtnEnable(true); } }; private void setBtnEnable(boolean flag) { mBtnSpeak.setEnabled(flag); mEditMsg.setClickable(flag); //mBtnChOrEn.setEnabled(flag); } private void transInputText() { mCurrentTransText = mEditMsg.getText().toString().trim() + ""; if (mCurrentTransText.length() > 0) { mEditMsg.setEnabled(false); if (UserInfo.S2T_CH2EN.equals(this.mUser.s2sType)) { this.mTranslater.transCH2EN(mCurrentTransText, false); } else { this.mTranslater.transEN2CH(mCurrentTransText, false); } } InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(mEditMsg.getWindowToken(), 0); } public void onClick(View v) { if (v == mBtnCancel) { finish(); } else if (v == mBtnSend) { String msg = mEditMsg.getText().toString().trim(); if(msg.length()>0){ if (PublicArithmetic.chTandEnF(msg)) { translator.transCH2EN(msg, false); dialog = ProgressDialog.show(this, null, "�����������Ժ�...", false, true); }else { translator.transEN2CH(msg, false); dialog = ProgressDialog.show(this, null, "�����������Ժ�...", false, true); } } } else if (v == mBtnSpeak) { isSpeaking = true; hideViewInput(mEditMsg); mInterpretView.setRecordLayoutDisp(View.VISIBLE); mDialog.show(); setBtnEnable(false); } else if (v == mEditMsg) { isSpeaking = false; } else if (v == mBtnChOrEn) { if (language.equals(UserInfo.S2T_CH2EN)) { mBtnChOrEn.setBackgroundResource(R.drawable.qa_btn_e_f); language = UserInfo.S2T_EN2CH; //mDialog.setToEnglishEngine(); mDialog.setToEN2CHEngine(); } else { mBtnChOrEn.setBackgroundResource(R.drawable.qa_btn_z_f); language = UserInfo.S2T_CH2EN; //mDialog.setToChineseEngine(); mDialog.setToCH2ENEngine(); } } else if (v.getId() == R.id.btn_bg || v.getId() == R.id.imagenovoiceanim) { mDialog.onRecognizerViewRecord(); LogInfo.LogOutE("haitian", "---------------stop record------------"); } else if (v.getId() == R.id.btn_cancel) { mDialog.onRecognizerViewCancel(); mInterpretView.setRecordLayoutDisp(View.GONE); setBtnEnable(true); // mInterpretView.dismissPopWindow(); } else if (v.getId() == R.id.btn_record) { if (!btnClickflag) { btnClickflag = true; mDialog.show(); mInterpretView.setBtnRecordEnable(true); } else { btnClickflag = false; mDialog.close(); mInterpretView.setRecordLayoutDisp(View.GONE); setBtnEnable(true); } LogInfo.LogOutE("haitian", "------------R.id.btn_record----------------"); } } private void hideViewInput(View v) { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(v.getWindowToken(), 0); } private void sendMsg() { String msg = mEditMsg.getText().toString().trim(); if ((msg.length() == 0)|| (msg.length()<=0) ) { return; } WXTextObject localWXTextObject = new WXTextObject(); localWXTextObject.text = msg; WXMediaMessage localWXMediaMessage = new WXMediaMessage(localWXTextObject); localWXMediaMessage.description = msg; GetMessageFromWX.Resp localResp = new GetMessageFromWX.Resp(); localResp.transaction = getTransaction(); localResp.message = localWXMediaMessage; this.iapi.sendResp(localResp); finish(); } private String getTransaction() { final GetMessageFromWX.Req req = new GetMessageFromWX.Req(bundle); return req.transaction; } private String mCurrentTransText = ""; private OnEngineListener mTranslaterListener = new OnEngineListener() { public void onEngineResult(List list, int flag, String id) { if (flag == EngineResultFlag.OVER) { if(list ==null){ return; }else if(list.size() >0){ mCurrentTransText = list.get(0).toString(); mEditMsg.append("\n"+mCurrentTransText); sendMsg(); } } mEditMsg.setEnabled(true); } @Override public void onEngineStart() { //WaitingActivity.waiting(AskQuestionActivity.this, 0); isWorking = true; } @Override public void onEngineEnd() { mBtnSend.setEnabled(true); WaitingActivity.stop(); isWorking = false; } }; public void onBegin() { //WaitingActivity.waiting(this, 0); } public void onEnd() { //WaitingActivity.stop(); } @Override public void finish() { super.finish(); overridePendingTransition(R.anim.popmore_exit, R.anim.popmore_show); } }