package com.ztspeech.simutalk2.qa; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import android.app.Activity; import android.app.AlertDialog; import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.os.Vibrator; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import cn.ac.ia.directtrans.json.Json; import cn.ac.ia.directtrans.json.JsonData; import cn.ac.ia.directtrans.json.JsonEditLinkman; import cn.ac.ia.directtrans.json.JsonFindLinkman; import cn.ac.ia.directtrans.json.JsonFindNearby; import cn.ac.ia.directtrans.json.JsonRequestResult; import cn.ac.ia.directtrans.json.JsonSendMessage; import cn.ac.ia.directtrans.json.UserInfo; import cn.ac.ia.directtrans.json.UserState; import com.baidu.location.LocationClient; import com.ztspeech.recognizer.OnEngineListener; import com.ztspeech.recognizerDialog.UnisayRecognizerDialog; import com.ztspeech.simutalk2.R; import com.ztspeech.simutalk2.data.FriendData; import com.ztspeech.simutalk2.data.FriendDataList; import com.ztspeech.simutalk2.dictionary.activity.ResultActivity; import com.ztspeech.simutalk2.dictionary.util.LogInfo; import com.ztspeech.simutalk2.dictionary.util.Util; import com.ztspeech.simutalk2.net.ListViewImageEngine; import com.ztspeech.simutalk2.net.PostPackageEngine; import com.ztspeech.simutalk2.net.ResultPackage; import com.ztspeech.simutalk2.qa.message.ProcessMessage; import com.ztspeech.simutalk2.qa.view.AdapterItemView; import com.ztspeech.simutalk2.qa.view.DataListAdapter; import com.ztspeech.simutalk2.qa.view.FindUserItemView; import com.ztspeech.simutalk2.qa.view.InterpretView; /** * ���ҡ���Ӻ��� * * */ public class FindUserActivity extends Activity implements OnClickListener, OnEngineListener { // view control private ListView mListView; // private EditText mEditFind; private Button mBtnReturn; private Button mBtnFind; private EditText edtName; private TextView tvNoResult; private Button btnFindNearby; private UnisayRecognizerDialog mDialog = null; private Button btnLuyin = null; // private FriendDataList mFriends = FriendDataList.getInstance(); private com.ztspeech.simutalk2.data.UserInfo mUser = com.ztspeech.simutalk2.data.UserInfo.getInstanse(); private JsonSendMessage mJsonMessage = new JsonSendMessage(); private JsonFindLinkman mFindUsers = new JsonFindLinkman(); // private MsgDataList mViewList = new MsgDataList(0); private FriendDataList searchUsersList = new FriendDataList(); private FriendDataList mFriends = FriendDataList.getInstance(); private JsonEditLinkman mJsonAddFriend = new JsonEditLinkman(); // private PostPackage mPostPackage; private ListViewImageEngine listViewImageLoaderEngine; private PostPackageEngine mPostPackageEngine; private Context context; private int postPackageType = 0; private int isAddingFriendId; // ========================================================= // private PopupWindow mRecognizerWindow = null; 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 200: postPackageCallBack((ResultPackage) msg.obj, postPackageType); break; case 404: Toast.makeText(context, (String) msg.obj, Toast.LENGTH_LONG).show(); break; case Location.GET_LOCATION: getLocation(msg); break; default: break; } }; }; private void btnDispProcess(boolean flag) { if (flag) { mInterpretView.setBtnCancelDisp(View.VISIBLE); } else { mInterpretView.setBtnCancelDisp(View.GONE); } } private boolean btnClickflag = false; private Vibrator mVibrator01 =null; private LocationClient mLocClient; public void initLocationSDK(){ mLocClient = ((Location)getApplication()).mLocationClient; ((Location)getApplication()).setHandler(handler); mVibrator01 =(Vibrator)getApplication().getSystemService(Service.VIBRATOR_SERVICE); ((Location)getApplication()).mVibrator01 = mVibrator01; } // ========================================================= @Override public void onCreate(Bundle savedInstanceState) { overridePendingTransition(R.anim.slideinright, R.anim.slideoutleft); super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_find_user); registerBoradcastReceiver(); context = this; // getWindow().setFormat(PixelFormat.RGBA_8888); mListView = (ListView) findViewById(R.id.lvQuestion); mBtnReturn = (Button) findViewById(R.id.btnReturn); mBtnFind = (Button) findViewById(R.id.btnFind); edtName = (EditText) findViewById(R.id.edtName); tvNoResult = (TextView) findViewById(R.id.tvNoResult); btnFindNearby = (Button) findViewById(R.id.btnFindNearby); btnFindNearby.setOnClickListener(this); mBtnReturn.setOnClickListener(this); mBtnFind.setOnClickListener(this); mBtnReturn.setText(""); tvNoResult.setText(getResources().getString(R.string.dictionary_noresult)); btnLuyin = (Button) findViewById(R.id.btnLuyin); btnLuyin.setOnClickListener(this); mInterpretView = new InterpretView(this, handler, this); mDialog = new UnisayRecognizerDialog(this, "", this, mInterpretView.mNewRecognizerViewListenerInterface); initLocationSDK(); initListView(); } @Override public void finish() { // TODO Auto-generated method stub super.finish(); overridePendingTransition(R.anim.slideinleft, R.anim.slideoutright); } private void postPackageCallBack(ResultPackage result, int postPackageType) { if (result.isNetSucceed()) { JsonRequestResult ret = JsonRequestResult.fromJson(result.getJson()); if (postPackageType == 0) { if (ret != null) { if (ret.succeed == true) { // �����û���� searchUsersList.clear(); int nSize = ret.items.size(); if (nSize > 0) { for (int i = 0; i < nSize; i++) { JsonData data = ret.items.get(i); UserInfo user = Json.fromJson(data.json, UserInfo.class); UserState us = new UserState(); us.id = user.id; us.name = user.name; us.photo = user.photo; FriendData msg = new FriendData(us); if (mFriends.findById(us.id) == null&&us.id!=mUser.state.id) { searchUsersList.add(msg); } } updateListView(); // ��ʾ�Ƿ��н�� if (searchUsersList.size() > 0) { tvNoResult.setVisibility(View.GONE); } else { tvNoResult.setVisibility(View.VISIBLE); } } else { tvNoResult.setVisibility(View.VISIBLE); } } else { new AlertDialog.Builder(FindUserActivity.this).setTitle("��ʾ").setMessage(ret.explain) .setPositiveButton("ȷ��", null).show(); } } }else if (postPackageType == 10) { mPostPackageEngine.dismissLoading(); if (ret != null) { if (ret.succeed == true) { // ���Ҹ������� searchUsersList.clear(); int nSize = ret.items.size(); if (nSize > 0) { for (int i = 0; i < nSize; i++) { JsonData data = ret.items.get(i); UserInfo user = Json.fromJson(data.json, UserInfo.class); UserState us = new UserState(); us.id = user.id; us.name = user.name; us.photo = user.photo; us.distance = user.distance; FriendData msg = new FriendData(us); if (mFriends.findById(us.id) == null&&us.id!=mUser.state.id) { searchUsersList.add(msg); } } updateListView(); // ��ʾ�Ƿ��н�� if (searchUsersList.size() > 0) { tvNoResult.setVisibility(View.GONE); } else { tvNoResult.setVisibility(View.VISIBLE); } } else { tvNoResult.setVisibility(View.VISIBLE); } } else { new AlertDialog.Builder(FindUserActivity.this).setTitle("��ʾ").setMessage(ret.explain) .setPositiveButton("ȷ��", null).show(); } } } else if (postPackageType == 1 || postPackageType == 2) { if (ret != null) { if (ret.succeed == true) { ProcessMessage pro = ProcessMessage.getInstance(); pro.process(ret, false); searchUsersList.deleteByUserId(isAddingFriendId); updateListView(); Toast.makeText(context, "��Ӻ��ѳɹ�", Toast.LENGTH_LONG).show(); } else { new AlertDialog.Builder(FindUserActivity.this).setTitle("��ʾ").setMessage(ret.explain) .setPositiveButton("ȷ��", null).show(); } } } } } // public IHttpPostListener mFindUsersListener = new IHttpPostListener() { // // @Override // public void onNetPostResult(PostPackage owner, ResultPackage result) { // // if (result.isNetSucceed()) { // JsonRequestResult ret = JsonRequestResult.fromJson(result.getJson()); // if (ret != null) { // if (ret.succeed == true) { // // finish(); // } else { // new // AlertDialog.Builder(FindUserActivity.this).setTitle("��ʾ").setMessage(ret.explain) // .setPositiveButton("ȷ��", null).show(); // } // } // } // // WaitingActivity.stop(); // } // }; private DataListAdapter mListViewAdapter = new DataListAdapter(this, searchUsersList) { @Override public AdapterItemView getAdapterItemView(Context context) { return new FindUserItemView(context, listViewImageLoaderEngine); } }; private void initListView() { listViewImageLoaderEngine = new ListViewImageEngine(mListView); mListView.setAdapter(mListViewAdapter); mListView.setDividerHeight(0); } public void onClick(View v) { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); if (v == mBtnReturn) { finish(); } else if (v == mBtnFind) { imm.hideSoftInputFromWindow(edtName.getWindowToken(), 0); String username = edtName.getText().toString().trim(); if (username.length() == 0) { Toast.makeText(this, "����������", Toast.LENGTH_SHORT).show(); return; } findUser(username); } else if (v == btnLuyin) { imm.hideSoftInputFromWindow(edtName.getWindowToken(), 0); if (mUser.s2sType.equals(com.ztspeech.simutalk2.data.UserInfo.S2T_CH2EN)) { mDialog.setToChineseEngine(); } else if (mUser.s2sType.equals(com.ztspeech.simutalk2.data.UserInfo.S2T_EN2CH)) { mDialog.setToEnglishEngine(); } mInterpretView.showPopWindowLocation(); mDialog.show(); } 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(); } } else if(v.getId() == R.id.btnFindNearby){ if(!mLocClient.isStarted()){ mLocClient.start(); mPostPackageEngine = new PostPackageEngine(context, null, handler); mPostPackageEngine.showLoading(); } } } /** * �����û���� */ private void findUser(String username) { mFindUsers.text = username; postPackageType = 0; mPostPackageEngine = new PostPackageEngine(context, mFindUsers, handler); mPostPackageEngine.post(); } /** * ���Ҹ������� */ private void findNearby(String latitude,String longitude) { JsonFindNearby mFindNearby = new JsonFindNearby(); mFindNearby.longitude = longitude; mFindNearby.latitude = latitude; mFindNearby.text = ""; postPackageType = 10; mPostPackageEngine.setJson(mFindNearby); mPostPackageEngine.post(false); } private void updateListView() { mListViewAdapter.notifyDataSetChanged(); } public void registerBoradcastReceiver() { IntentFilter myIntentFilter = new IntentFilter(); myIntentFilter.addAction("com.action.addfriend"); registerReceiver(receiveAddFriendEvent, myIntentFilter); } public BroadcastReceiver receiveAddFriendEvent = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals("com.action.addfriend")) { addFriend(intent.getIntExtra("id", 0), intent.getStringExtra("name")); } } }; private void addFriend(int id, String name) { System.out.println(id + ">>>>>>>>>" + name); if (id != 0 && name != null && name.length() > 0) { mJsonAddFriend.setInviteLinkman(id); isAddingFriendId = id; mJsonAddFriend.name = name; postPackageType = 1; mPostPackageEngine = new PostPackageEngine(context, mJsonAddFriend, handler); mPostPackageEngine.post(); } } @Override protected void onDestroy() { unregisterReceiver(receiveAddFriendEvent); super.onDestroy(); } @Override public void onEngineEnd() { // TODO Auto-generated method stub } @Override public void onEngineResult(List arg0, int arg1, String id) { mDialog.close(); mInterpretView.dismissPopWindow(); if (arg0 == null) { return; } if (arg0.size() > 0) { String text = (String) ((String) arg0.get(0)).replace(".", "").replace("��", "").replace("?", "") .replace("��", "").replace("!", "").replace("��", ""); edtName.setText(text); } } @Override public void onEngineStart() { // TODO Auto-generated method stub } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { mDialog.close(); mInterpretView.dismissPopWindow(); } return super.onKeyDown(keyCode, event); } /** * ��ȡ��ǰλ������ * @param msg */ public void getLocation(Message msg){ mLocClient.stop(); HashMap mlocation = (HashMap)msg.obj; findNearby(mlocation.get("latitude").toString(), mlocation.get("longitude").toString()); // new AlertDialog.Builder(FindUserActivity.this).setTitle(null).setMessage("latitude"+mlocation.get("latitude").toString()+"\n longitude"+mlocation.get("longitude").toString()) // .setPositiveButton("ȷ��", null).show(); } }