package com.ztspeech.simutalk2.qa;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.PixelFormat;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Toast;
import cn.ac.ia.directtrans.json.AskTask;
import cn.ac.ia.directtrans.json.Json;
import cn.ac.ia.directtrans.json.JsonData;
import cn.ac.ia.directtrans.json.JsonFunction;
import cn.ac.ia.directtrans.json.JsonLogin;
import cn.ac.ia.directtrans.json.JsonQuestion;
import cn.ac.ia.directtrans.json.JsonRequest;
import cn.ac.ia.directtrans.json.JsonRequestResult;
import cn.ac.ia.directtrans.json.QuestionInfo;
import cn.ac.ia.directtrans.json.UserState;
import com.ztspeech.recognizer.PhoneInfo;
import com.ztspeech.simutalk2.R;
import com.ztspeech.simutalk2.data.AskTaskList;
import com.ztspeech.simutalk2.data.GlobalData;
import com.ztspeech.simutalk2.data.TextPlayer;
import com.ztspeech.simutalk2.data.UserInfo;
import com.ztspeech.simutalk2.dictionary.util.PublicArithmetic;
import com.ztspeech.simutalk2.dictionary.util.Util;
import com.ztspeech.simutalk2.net.PostPackage;
import com.ztspeech.simutalk2.net.PostPackage.IHttpPostListener;
import com.ztspeech.simutalk2.net.PostPackageEngine;
import com.ztspeech.simutalk2.net.ResultPackage;
import com.ztspeech.simutalk2.qa.message.ProcessMessage;
public class UserStateActivity extends UpdateBaseActivity implements OnClickListener, IHttpPostListener {
private static final int ACTIVITY_ASK = 100;
private static final int ACTIVITY_SOLVE = 200;
public static final String PARAM_NAME = "name";
public static final String PARAM_TEXT = "text";
public static final String PARAM_TIME = "time";
public static final String PARAM_TYPE = "type";
public static UserStateActivity mInstance;
public static boolean isTaskListUpdate = true;
public static QuestionInfo mQuestionInfo;
private UserInfo mUser = UserInfo.getInstanse();
private AskTaskList mTaskList = GlobalData.getAskInstance();
private AskTaskList mFishList = GlobalData.getFishInstance();
private AskTaskList mTempTaskList = new AskTaskList();
private JsonRequest mLoginRequest = new JsonRequest();
private JsonLogin mJsonLogin = new JsonLogin();
private JsonQuestion mJsonMessage = new JsonQuestion();
// private PostPackage mPostPackage;
private Button mBtnAsk;
private Button mBtnAsk1;
private Button mBtnSolve;
/**
* ������
*/
private ImageButton mBtnFish;
private RadioButton mrbNetState;
private ImageView mivBackground;
private TextView mtvTaskCount;
private TextView mTvUserName;
private TextView mTvAskCount;
private TextView mTvSolveCount;
private Button mBtnSolve2;
private ImageView ivBirdLeft;// ������
private AnimationDrawable rocketAnimationLeft;// �������ȳ��
private FrameLayout mflSolve;
private FrameLayout mflFish;
private TextView tvFishCount;
/**
* ��ǰ����
*/
private AskTask mCurrentTask;
// ��ij�ʼ����
private float mSolvePostionX = 0;
private float mSolvePostionY = 0;
private float mAskPostionX = 0;
private float mAskPostionY = 0;
private boolean mIsInitView = false;
private Context context;
private PostPackageEngine mPostPackageEngine;
private int postPackageType = 0;
private Handler mUpdateBirdPostionLoop = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 200:
postPackageCallBack((ResultPackage) msg.obj, postPackageType);
break;
default:
Toast.makeText(context, (String) msg.obj, Toast.LENGTH_LONG).show();
mBtnAsk.setVisibility(View.VISIBLE);
mBtnAsk1.setVisibility(View.VISIBLE);
break;
}
};
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFormat(PixelFormat.RGBA_8888);
setContentView(R.layout.activity_user_state);
mIsInitView = false;
mInstance = this;
context = this;
mBtnAsk = (Button) findViewById(R.id.btnAsk);
mBtnAsk1 = (Button) findViewById(R.id.btnAsk1);
mBtnSolve = (Button) findViewById(R.id.btnSolve);
mBtnFish = (ImageButton) findViewById(R.id.btnFish);
mrbNetState = (RadioButton) findViewById(R.id.rbNetState);
mflSolve = (FrameLayout) findViewById(R.id.flSolve);
mflFish= (FrameLayout) findViewById(R.id.fishQuestion);
mivBackground = (ImageView) findViewById(R.id.ivBackground);
mTvUserName = (TextView) findViewById(R.id.tvUserName);
mTvAskCount = (TextView) findViewById(R.id.tvAskCount);
mTvSolveCount = (TextView) findViewById(R.id.tvSolveCount);
mBtnSolve2 = (Button) findViewById(R.id.btnSolve2);
mtvTaskCount = (TextView) findViewById(R.id.tvTaskCount);
tvFishCount = (TextView) findViewById(R.id.tvFishCount);
mBtnAsk.setOnClickListener(this);
mBtnAsk1.setOnClickListener(this);
mBtnSolve.setOnClickListener(this);
mBtnSolve2.setOnClickListener(this);
mBtnFish.setOnClickListener(this);
mrbNetState.setEnabled(false);
mrbNetState.setVisibility(View.INVISIBLE);
mflSolve.setVisibility(View.INVISIBLE);
mflFish.setVisibility(View.INVISIBLE);
mBtnSolve2.setVisibility(View.INVISIBLE);
mBtnAsk.setVisibility(View.VISIBLE);
mBtnAsk1.setVisibility(View.VISIBLE);
/**
* ��
*/
ivBirdLeft = (ImageView) findViewById(R.id.ivBirdLeft);
ivBirdLeft.setBackgroundResource(R.anim.bird_rock_left);
// ivBirdRight = (ImageView) findViewById(R.id.ivBirdRight);
// ivBirdRight.setBackgroundResource(R.anim.bird_rock_right);
// ivBirdRight.setVisibility(View.INVISIBLE);
ivBirdLeft.setVisibility(View.INVISIBLE);
mUpdateBirdPostionLoop.postDelayed(mUpdateRunnable, 300);
updateUserState();
setCtrlsPostoin();
}
private Runnable mUpdateRunnable = new Runnable() {
public void run() {
if (false == setCtrlsPostoin()) {
mUpdateBirdPostionLoop.postDelayed(mUpdateRunnable, 300);
}
}
};
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
setCtrlsPostoin();
}
@Override
protected void onResume() {
super.onResume();
setCtrlsPostoin();
isTaskListUpdate = true;
updateMesage();
}
@Override
protected void onRestart() {
super.onRestart();
setCtrlsPostoin();
}
private boolean setCtrlsPostoin() {
if (mIsInitView) {
return true;
}
int h = mivBackground.getMeasuredHeight();
int w = mivBackground.getMeasuredWidth();
if (h == 0) {
return false;
}
mIsInitView = true;
mSolvePostionX = (int) Math.round(w * 0.382);
mSolvePostionY = (int) Math.round(h * 0.255);
mAskPostionX = (int) Math.round(w * 0.45);
mAskPostionY = (int) Math.round(h * 0.85);
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) mflSolve.getLayoutParams();
if (params != null) {
params.leftMargin = (int) (mSolvePostionX - mflSolve.getMeasuredWidth() * 0.5);
params.topMargin = (int) (mSolvePostionY - mflSolve.getMeasuredHeight() * 0.5);
mflSolve.setLayoutParams(params);
}
params = (ViewGroup.MarginLayoutParams) mflFish.getLayoutParams();
if (params != null) {
params.leftMargin = (int) (mSolvePostionX - mflFish.getMeasuredWidth() * 0.5);
params.topMargin = (int) (mSolvePostionY - mflFish.getMeasuredHeight() * 0.7);
mflFish.setLayoutParams(params);
}
params = (ViewGroup.MarginLayoutParams) mBtnAsk1.getLayoutParams();
if (params != null) {
params.leftMargin = (int) (mAskPostionX);
params.topMargin = (int) (mAskPostionY - mBtnAsk1.getMeasuredHeight());
mBtnAsk1.setLayoutParams(params);
}
params = (ViewGroup.MarginLayoutParams) ivBirdLeft.getLayoutParams();
if (params != null) {
params.leftMargin = (int) (mAskPostionX - ivBirdLeft.getMeasuredWidth() * 0.5);
params.topMargin = (int) (mAskPostionY - ivBirdLeft.getMeasuredHeight());
ivBirdLeft.setLayoutParams(params);
}
return true;
}
@Override
protected void onStart() {
super.onStart();
setCtrlsPostoin();
}
@Override
public void setVisible(boolean visible) {
super.setVisible(visible);
if (visible) {
setCtrlsPostoin();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, 1, 1, "ˢ��");
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 1:
updateUserInfo();
break;
}
return super.onOptionsItemSelected(item);
}
private void updateUserState() {
mTvUserName.setText(UserInfo.state.name + "");
mTvAskCount.setText(UserInfo.state.ask + "");
mTvSolveCount.setText(UserInfo.state.solve + "");
mrbNetState.setChecked(mUser.isLogin());
mUser.isChange = false;
}
public void askBirdFly() {
ivBirdLeft.setBackgroundResource(R.anim.bird_rock_left);
rocketAnimationLeft = (AnimationDrawable) ivBirdLeft.getBackground();
rocketAnimationLeft.start();
ivBirdLeft.setVisibility(View.VISIBLE);
mBtnAsk.setVisibility(View.INVISIBLE);
mBtnAsk1.setVisibility(View.INVISIBLE);
TranslateAnimation tAnimation = new TranslateAnimation(Animation.ABSOLUTE, -470, Animation.ABSOLUTE, -220);
tAnimation.setDuration(3000);
// tAnimation.setFillAfter(true);
ivBirdLeft.startAnimation(tAnimation);
new Handler().postDelayed(new Runnable() {
public void run() {
ivBirdLeft.setVisibility(View.GONE);
mBtnAsk.setVisibility(View.VISIBLE);
mBtnAsk1.setVisibility(View.VISIBLE);
rocketAnimationLeft.stop();
}
}, 3000);
}
public static void askSend() {
new Handler().postDelayed(new Runnable() {
public void run() {
mInstance.askBirdFly();
}
}, 700);
}
public void onClick(View arg0) {
if (arg0 == mBtnAsk) {
PublicArithmetic.buttonClickOnlyOneTime(mBtnAsk);
askQusetion();
} else if (arg0 == mBtnAsk1) {
PublicArithmetic.buttonClickOnlyOneTime(mBtnAsk1);
askQusetion();
} else if (mBtnFish == arg0) {
fishQusetion();
} else if (arg0 == mBtnSolve || arg0 == mBtnSolve2) {
solveBirdFly1();
} else if (arg0 == mBtnFish) {
fishQuestionBirdFly1();
}
}
/**
* ��һ������
*/
private void fishQusetion() {
mJsonMessage.cmd = JsonQuestion.OBTAIN;
mJsonMessage.type = "";
// ��֤����
// ��֤����
Util.handkey++;
mJsonMessage.handkey = Util.handkey;
postPackageType = 3;
mPostPackageEngine = new PostPackageEngine(this.getParent(), mJsonMessage, mUpdateBirdPostionLoop);
mPostPackageEngine.post();
}
/**
* ��ȡ����С�����
*/
private void fishQuestionBirdFly1() {
ivBirdLeft.setBackgroundResource(R.anim.bird_rock_left_b);
rocketAnimationLeft = (AnimationDrawable) ivBirdLeft.getBackground();
rocketAnimationLeft.start();
ivBirdLeft.setVisibility(View.VISIBLE);
mBtnAsk.setVisibility(View.INVISIBLE);
mBtnAsk1.setVisibility(View.INVISIBLE);
float xTo = mSolvePostionX - mAskPostionX + ivBirdLeft.getMeasuredWidth() * 0.5f;
TranslateAnimation tAnimation = new TranslateAnimation(0, xTo, 0, mSolvePostionY - mAskPostionY);
tAnimation.setDuration(2000);
// tAnimation.setFillAfter(true);
ivBirdLeft.startAnimation(tAnimation);
new Handler().postDelayed(new Runnable() {
public void run() {
fishQusetion();
ivBirdLeft.setVisibility(View.INVISIBLE);
rocketAnimationLeft.stop();
isTaskListUpdate = true;
updateMesage();
}
}, 2000);
}
/**
* ������������
*/
private void solveBirdFly1() {
ivBirdLeft.setBackgroundResource(R.anim.bird_rock_left_b);
rocketAnimationLeft = (AnimationDrawable) ivBirdLeft.getBackground();
rocketAnimationLeft.start();
ivBirdLeft.setVisibility(View.VISIBLE);
mBtnAsk.setVisibility(View.INVISIBLE);
mBtnAsk1.setVisibility(View.INVISIBLE);
float xTo = mSolvePostionX - mAskPostionX + ivBirdLeft.getMeasuredWidth() * 0.5f;
float yTo = mSolvePostionY - (mAskPostionY - mBtnAsk1.getMeasuredHeight()); // mSolvePostionX
// -
// mAskPostionX
// +
// ivBirdLeft.getMeasuredWidth()
// *
// 0.5f;
TranslateAnimation tAnimation = new TranslateAnimation(0, xTo, 0, yTo);
tAnimation.setDuration(2000);
// tAnimation.setFillAfter(true);
ivBirdLeft.startAnimation(tAnimation);
new Handler().postDelayed(new Runnable() {
public void run() {
solveQuestion();
ivBirdLeft.setVisibility(View.INVISIBLE);
rocketAnimationLeft.stop();
isTaskListUpdate = true;
updateMesage();
}
}, 2000);
// new Handler().postDelayed(new Runnable(){
// public void run() {
// mllAsk.setVisibility(View.VISIBLE);
// }
// }, 5500);
}
private void updateUserInfo() {
// mPostPackage = new PostPackage(this.getParent(), this);
mLoginRequest.function = JsonFunction.LOGIN;
mJsonLogin.imei = PhoneInfo.getInstance().getIMEI();
mJsonLogin.name = mUser.getUserName();
mJsonLogin.version = UserInfo.version;
mLoginRequest.json = Json.toJson(mJsonLogin);
Util.handkey++;
mJsonMessage.handkey = Util.handkey;
postPackageType = 0;
mPostPackageEngine = new PostPackageEngine(this.getParent(), mLoginRequest, mUpdateBirdPostionLoop);
mPostPackageEngine.post();
// if (mPostPackage.post(mLoginRequest, getString(R.string.host_ip),
// true)) {
//
// // mLogin.setEnabled(false);
// WaitingActivity.waiting(this, 0);
// }
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (requestCode == ACTIVITY_ASK) {
} else if (requestCode == ACTIVITY_SOLVE) {
if (resultCode == requestCode) {
// Toast.makeText(UserStateActivity.this, "222222",
// Toast.LENGTH_SHORT).show();
askBirdFly();
}
}
}
isTaskListUpdate = true;
updateMesage();
super.onActivityResult(requestCode, resultCode, data);
}
private void askQusetion() {
Intent intent = new Intent(this, AskQuestionActivity.class);
intent.putExtra(PARAM_TYPE, AskQuestionActivity.TYPE_NEW);
startActivityForResult(intent, ACTIVITY_ASK);
}
private void solveQuestion() {
// mPostPackage = new PostPackage(this.getParent(), mGetSolveListener);
mCurrentTask = mTaskList.putTaskId();
if (mCurrentTask == null) {
mJsonMessage.cmd = JsonQuestion.OBTAIN;
} else {
mJsonMessage.id = mCurrentTask.id;
mJsonMessage.cmd = JsonQuestion.GET_ASK;
}
mJsonMessage.type = "";
// ��֤����
Util.handkey++;
mJsonMessage.handkey = Util.handkey;
updateMesage();
postPackageType = 1;
mPostPackageEngine = new PostPackageEngine(this.getParent(), mJsonMessage, mUpdateBirdPostionLoop);
mPostPackageEngine.post();
}
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) {
UserState state = Json.fromJson(ret.json, UserState.class);
mUser.setInfo(state);
updateUserState();
ProcessMessage pro = ProcessMessage.getInstance();
pro.process(ret, false);
} else {
new AlertDialog.Builder(this.getParent()).setTitle("��ʾ").setMessage(ret.explain)
.setPositiveButton("ȷ��", null).show();
}
}
} else if (postPackageType == 1) {
if (ret != null) {
if (ret.succeed == true) {
Util.handkey++;// ��������ֵ
mQuestionInfo = Json.fromJson(ret.json, QuestionInfo.class);
if (mQuestionInfo != null) {
Intent intent = new Intent(UserStateActivity.this, SolveQuestionActivity.class);
startActivityForResult(intent, ACTIVITY_SOLVE);
// Intent intent = new
// Intent(UserStateActivity.this,
// GetQuestionActivity.class);
// startActivityForResult(intent,ACTIVITY_SOLVE);
}
mTempTaskList.clear();
int nCount = ret.items.size();
for (int i = 0; i < nCount; i++) {
JsonData data = ret.items.get(i);
AskTask task = Json.fromJson(data.json, AskTask.class);
if (task != null) {
mTempTaskList.AddTask(task);
}
}
mTaskList.setTaskList(mTempTaskList);
updateMesage();
} else {
new AlertDialog.Builder(UserStateActivity.this.getParent()).setTitle("��ʾ")
.setMessage(ret.explain).setPositiveButton("ȷ��", null).show();
}
}
} else if (postPackageType == 3) {
if (ret != null) {
if (ret.succeed == true) {
Util.handkey++;// ��������ֵ
mQuestionInfo = Json.fromJson(ret.json, QuestionInfo.class);
if (mQuestionInfo != null) {
Intent intent = new Intent(UserStateActivity.this, SolveQuestionActivity.class);
startActivityForResult(intent, ACTIVITY_SOLVE);
}
mTempTaskList.clear();
int nCount = ret.items.size();
for (int i = 0; i < nCount; i++) {
JsonData data = ret.items.get(i);
AskTask task = Json.fromJson(data.json, AskTask.class);
if (task != null) {
mTempTaskList.AddTask(task);
}
}
mFishList.setTaskList(mTempTaskList);
showFishCount();
} else {
new AlertDialog.Builder(UserStateActivity.this.getParent()).setTitle("��ʾ")
.setMessage(ret.explain).setPositiveButton("ȷ��", null).show();
mFishList.deleteTopTask();
isTaskListUpdate = true;
updateMesage();
}
}
}
}
mBtnAsk.setVisibility(View.VISIBLE);
mBtnAsk1.setVisibility(View.VISIBLE);
}
@Override
public void onNetPostResult(PostPackage owner, ResultPackage result) {
if (result.isNetSucceed()) {
JsonRequestResult ret = JsonRequestResult.fromJson(result.getJson());
if (ret != null) {
if (ret.succeed == true) {
UserState state = Json.fromJson(ret.json, UserState.class);
mUser.setInfo(state);
updateUserState();
ProcessMessage pro = ProcessMessage.getInstance();
pro.process(ret, false);
} else {
new AlertDialog.Builder(this.getParent()).setTitle("��ʾ").setMessage(ret.explain)
.setPositiveButton("ȷ��", null).show();
}
}
}
// mLogin.setEnabled(true);
WaitingActivity.stop();
}
public void showTaskCount(int count) {
showFishCount();
if (count <= 0) {
mtvTaskCount.setText("");
mflSolve.setVisibility(View.INVISIBLE);
mBtnSolve2.setVisibility(View.INVISIBLE);
if (mFishList.getTaskCount() > 0) {
mflFish.setVisibility(View.VISIBLE);
} else {
mflFish.setVisibility(View.INVISIBLE);
}
} else {
mBtnSolve.setEnabled(true);
mtvTaskCount.setText(count + "");
// mtvTaskCount.setVisibility(View.VISIBLE);
mflSolve.setVisibility(View.VISIBLE);
mBtnSolve2.setVisibility(View.VISIBLE);
mflFish.setVisibility(View.INVISIBLE);
}
}
private MainTabActivity mMainTabActivity = MainTabActivity.getInstance();
private InteractionActivity mInteractionActivity = InteractionActivity.getInstance();
@Override
public void updateMesage() {
if (mUser.isChange) {
updateUserState();
}
if (isTaskListUpdate) {
isTaskListUpdate = false;
int nCount = mTaskList.getTaskCount();
showTaskCount(nCount);
mMainTabActivity.updateTaskCount();
mInteractionActivity.showTaskCount(nCount);
}
}
@Override
public void isShowTipDialog(String msg) {
}
public void showFishCount() {
if (mFishList != null) {
tvFishCount.setText(mFishList.getTaskCount() + "");
}
}
@Override
protected void onStop() {
if(TextPlayer.getInstance().isPlaying()){
TextPlayer.getInstance().stop();
}
super.onStop();
}
}