package com.ztspeech.simutalk2.trans; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import android.app.AlertDialog; import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.text.Editable; import android.text.TextWatcher; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import cn.ac.ia.directtrans.json.JsonQuestion; import cn.ac.ia.directtrans.json.JsonRequestResult; import cn.ac.ia.files.RequestParam; import com.ztspeech.recognizer.OnEngineListener; import com.ztspeech.recognizer.speak.VoicePlayer; import com.ztspeech.recognizer.speak.interf.OnPlayerListener; import com.ztspeech.recognizerDialog.UnisayRecognizerDialog; import com.ztspeech.simutalk2.R; import com.ztspeech.simutalk2.data.MsgGroupList; import com.ztspeech.simutalk2.data.UserInfo; import com.ztspeech.simutalk2.dictionary.activity.BaseActivity; import com.ztspeech.simutalk2.dictionary.util.LogInfo; import com.ztspeech.simutalk2.dictionary.util.Util; import com.ztspeech.simutalk2.net.PostPackageEngine; import com.ztspeech.simutalk2.net.ResultPackage; import com.ztspeech.simutalk2.qa.PostVoiceDataToServerEngine; import com.ztspeech.simutalk2.qa.view.InterpretView; public class UserPropose extends BaseActivity 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 UnisayRecognizerDialog mDialog = null; private VoicePlayer mPlayer = null; // data private boolean mHasVoice = false; private MsgGroupList mMsgGroupList = MsgGroupList.getInstance(); private UserInfo mUser = UserInfo.getInstanse(); private JsonQuestion mJsonMessage = new JsonQuestion(); // private PostPackage mPostPackage; private int mVoiceLength = 0; private String mVoiceId = ""; private static String language; private PostVoiceDataToServerEngine mPostVoiceDataToServerEngine; private Context context; private PostPackageEngine mPostPackageEngine; private InterpretView 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); 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; // ========================================================= @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTitleAndContentView(R.layout.activity_userpropose, "�������"); context = this; mInterpretView = new InterpretView(this, handler, this); mDialog = new UnisayRecognizerDialog(this, "", mRecognizerListener, mInterpretView.mNewRecognizerViewListenerInterface); mPlayer = new VoicePlayer(this); mPlayer.setListener(mPlayerListener); mPostVoiceDataToServerEngine = new PostVoiceDataToServerEngine(context, handler); mBtnSend = (Button) findViewById(R.id.btnSend); mBtnCancel = (Button) findViewById(R.id.btnCancel); mBtnSpeak = (Button) findViewById(R.id.btnSpeak); mBtnChOrEn = (Button) findViewById(R.id.btnChOrEn); mEditMsg = (EditText) findViewById(R.id.editMsg); if (language == null) { language = mUser.s2sType; } if (language.equals(UserInfo.S2T_CH2EN)) { mBtnChOrEn.setBackgroundResource(R.drawable.qa_btn_z_f); mDialog.setToChineseEngine(); } else { mBtnChOrEn.setBackgroundResource(R.drawable.qa_btn_e_f); mDialog.setToEnglishEngine(); } mBtnSend.setOnClickListener(this); mBtnSpeak.setOnClickListener(this); mBtnCancel.setOnClickListener(this); mBtnChOrEn.setOnClickListener(this); mEditMsg.addTextChangedListener(mOnTextChangedListener); } private OnPlayerListener mPlayerListener = new OnPlayerListener() { public InputStream getPlayWaveData(String text) { // TODO Auto-generated method stub // InputStream in = getTTSInputStream(text); // InputStream in = mTtsDownloader.getTTSInputStream(text); return null; } public void onPlayStart() { // TODO Auto-generated method stub } public void onPlayStop() { // TODO Auto-generated method stub } public void onPlayLoadDataStart() { // TODO Auto-generated method stub } public void onPlayLoadDataEnd() { // TODO Auto-generated method stub } }; private OnEngineListener mRecognizerListener = new OnEngineListener() { public void onEngineResult(List list, int flag, String id) { mDialog.close(); mInterpretView.dismissPopWindow(); // TODO Auto-generated method stub if (list == null) { mVoiceLength = 0; return; } // String text = ""; for (int i = 0; i < list.size(); i++) { mEditMsg.append((String) list.get(i)); } // mEditMsg.setText(text); if (list.size() > 0) { byte[] voice = (byte[]) mDialog.getObject(); mVoiceLength = voice.length; mHasVoice = true; } mBtnSpeak.setEnabled(true); } public void onEngineStart() { // TODO Auto-generated method stub } public void onEngineEnd() { // TODO Auto-generated method stub mBtnSpeak.setEnabled(true); } }; public void onClick(View v) { if (v == mBtnCancel) { finish(); } else if (v == mBtnSend) { sendMsg(); } else if (v == mBtnSpeak) { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(mEditMsg.getWindowToken(), 0); // mBtnSpeak.setEnabled(false); mInterpretView.showPopWindowLocation(); mDialog.show(); } else if (v == mEditMsg) { } else if (v == mBtnChOrEn) { if (language.equals(UserInfo.S2T_CH2EN)) { mBtnChOrEn.setBackgroundResource(R.drawable.qa_btn_e_f); language = UserInfo.S2T_EN2CH; mDialog.setToEnglishEngine(); } else { mBtnChOrEn.setBackgroundResource(R.drawable.qa_btn_z_f); language = UserInfo.S2T_CH2EN; mDialog.setToChineseEngine(); } } 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.dismissPopWindow(); } else if (v.getId() == R.id.btn_record) { if (!btnClickflag) { btnClickflag = true; mDialog.show(); mInterpretView.setBtnRecordEnable(true); } else { btnClickflag = false; mDialog.close(); mInterpretView.dismissPopWindow(); } } } 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 && mHasVoice == false) { Util.showToast(this, "���ݲ���Ϊ�գ�"); return; } if (mHasVoice) { byte[] voice = (byte[]) mDialog.getObject(); // AsyncHttpPost post = new AsyncHttpPost(this); // post.setHost(getString(R.string.file_host_ip), "drt", // UserInfo.state.id + ""); // post.postVoice(voice, RequestParam.FILE_TYPE_VOICE); // setButtonEnabled(false); mPostVoiceDataToServerEngine.httpRequestPostNewThread(voice, RequestParam.FILE_TYPE_VOICE); } else { postMsg(msg, "", 0); } } private void setButtonEnabled(boolean b) { // TODO Auto-generated method stub mBtnSend.setEnabled(b); mBtnSpeak.setEnabled(b); } protected boolean mMessageChanged = true; private TextWatcher mOnTextChangedListener = new TextWatcher() { @Override public void afterTextChanged(Editable arg0) { // TODO Auto-generated method stub } @Override public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { // TODO Auto-generated method stub } @Override public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { mMessageChanged = true; } }; private void postMsg(String sText, String vId, int vLen) { // mPostPackage = new PostPackage(this, mPostTextListener); mJsonMessage.owner = 0; mJsonMessage.text = sText; mJsonMessage.type = ""; mJsonMessage.vLen = vLen; mJsonMessage.vId = vId; if (mMessageChanged) { mMessageChanged = false; Util.handkey++; } // ���� mJsonMessage.handkey = Util.handkey; mJsonMessage.id = 0; mJsonMessage.cmd = JsonQuestion.SOLVE; mPostPackageEngine = new PostPackageEngine(context, mJsonMessage, handler); handler.sendEmptyMessage(104); mPostPackageEngine.post(); // if (mPostPackage.post(mJsonMessage, getString(R.string.host_ip), // true)) { // // setButtonEnabled(false); // WaitingActivity.waiting(this, 0); // } } private void postVoiceDataCallBack(String fileId) { setButtonEnabled(true); if (fileId == null) { handler.sendEmptyMessage(104); return; } if (fileId.length() == 0) { handler.sendEmptyMessage(104); return; } byte[] voice = (byte[]) mDialog.getObject(); String msg = mEditMsg.getText().toString().trim(); postMsg(msg, fileId, voice.length); } private void postPackageCallBack(ResultPackage result) { if (result.isNetSucceed()) { JsonRequestResult ret = JsonRequestResult.fromJson(result.getJson()); if (ret != null) { if (ret.succeed == true) { mHasVoice = false; Util.handkey++;// ����handkey finish(); Toast.makeText(UserPropose.this, getResources().getString(R.string.userpropose_success), Toast.LENGTH_SHORT).show(); } else { new AlertDialog.Builder(UserPropose.this).setTitle("��ʾ").setMessage(ret.explain) .setPositiveButton("ȷ��", null).show(); } } } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { mDialog.close(); mInterpretView.dismissPopWindow(); } return super.onKeyDown(keyCode, event); } // public IHttpPostListener mPostTextListener = new IHttpPostListener() { // // @Override // public void onNetPostResult(PostPackage owner, ResultPackage result) { // // TODO Auto-generated method stub // if (result.isNetSucceed()) { // mHasVoice = false; // JsonRequestResult ret = JsonRequestResult.fromJson(result.getJson()); // if (ret != null) { // if (ret.succeed == true) { // finish(); // } else { // new // AlertDialog.Builder(UserPropose.this).setTitle("��ʾ").setMessage(ret.explain) // .setPositiveButton("ȷ��", null).show(); // } // } // } // // setButtonEnabled(true); // WaitingActivity.stop(); // // } // }; // @Override // public void onData(String fileId) { // // TODO Auto-generated method stub // setButtonEnabled(true); // if (fileId == null) { // // return; // } // if (fileId.length() == 0) { // // return; // } // // byte[] voice = (byte[]) mDialog.getObject(); // String msg = mEditMsg.getText().toString().trim(); // postMsg(msg, fileId, voice.length); // } // // @Override // public void onBegin() { // // TODO Auto-generated method stub // WaitingActivity.waiting(this, 0); // } // // @Override // public void onEnd() { // // TODO Auto-generated method stub // WaitingActivity.stop(); // } }