package com.znv.linkup.view.dialog;
import android.app.Dialog;
import android.graphics.drawable.Drawable;
import android.os.Message;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.znv.linkup.GameActivity;
import com.znv.linkup.R;
import com.znv.linkup.WelcomeActivity;
import com.znv.linkup.core.config.GameMode;
import com.znv.linkup.db.DbScore;
import com.znv.linkup.db.LevelScore;
import com.znv.linkup.rest.IUpload;
import com.znv.linkup.rest.LevelInfo;
import com.znv.linkup.rest.UserInfo;
import com.znv.linkup.rest.UserScore;
import com.znv.linkup.util.ShareUtil;
import com.znv.linkup.util.StringUtil;
import com.znv.linkup.view.LevelTop;
import com.znv.linkup.view.LevelTop.LevelTopStatus;
/**
* 计时模式结果
*
* @author yzb
*
*/
public class TaskDialog extends Dialog implements IUpload {
private GameActivity linkup = null;
private ResultInfo resultInfo = null;
private LevelTop levelTop = null;
private ShareUtil shareHelper = null;
public TaskDialog(final GameActivity linkup) {
super(linkup, R.style.CustomDialogStyle);
this.linkup = linkup;
setContentView(R.layout.task_dialog);
setCancelable(false);
setCanceledOnTouchOutside(false);
shareHelper = new ShareUtil(getContext());
TextView btnBack = (TextView) findViewById(R.id.btnBack);
btnBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
levelTop.cancelUrlImages();
cancel();
linkup.onBackPressed();
}
});
TextView btnShare = (TextView) findViewById(R.id.btnshare);
btnShare.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String msg = String.format(getContext().getString(R.string.share_task), linkup.getLevelCfg().getLevelName(),
String.valueOf(resultInfo.getScore()));
if (linkup.getLevelCfg().getLevelMode() == GameMode.TimeTask) {
msg = String.format(getContext().getString(R.string.share_time), linkup.getLevelCfg().getLevelName(),
StringUtil.secondToString(resultInfo.getTime()));
}
// 分享
if (levelTop.getTopStatus() == LevelTopStatus.TopInfo) {
// 带截图分享
shareHelper.shareMsgView(msg, levelTop);
} else {
shareHelper.shareMessage(msg);
}
}
});
levelTop = (LevelTop) findViewById(R.id.task_top);
levelTop.setUploadListener(this);
}
/**
* 处理返回键
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
TextView btn = (TextView) findViewById(R.id.btnBack);
btn.performClick();
return true;
}
return super.onKeyDown(keyCode, event);
}
/**
* 显示游戏胜利对话框
*
* @param resultInfo
* 游戏结果
*/
public void showDialog(ResultInfo resultInfo) {
this.resultInfo = resultInfo;
TextView tvScoreLabel = (TextView) findViewById(R.id.lb_score);
TextView tvScore = (TextView) findViewById(R.id.success_score);
TextView tvTask = (TextView) findViewById(R.id.task_score);
if (linkup.getLevelCfg().getLevelMode() == GameMode.ScoreTask) {
tvScoreLabel.setText(R.string.game_score);
tvScore.setText(String.valueOf(resultInfo.getScore()) + getContext().getString(R.string.score_unit));
tvTask.setText(String.valueOf(linkup.getLevelCfg().getScoreTask()) + getContext().getString(R.string.score_unit));
} else if (linkup.getLevelCfg().getLevelMode() == GameMode.TimeTask) {
tvScoreLabel.setText(R.string.game_time);
tvScore.setText(StringUtil.secondToString(resultInfo.getTime()) + getContext().getString(R.string.time_unit));
tvTask.setText(StringUtil.secondToString(linkup.getLevelCfg().getTimeTask()) + getContext().getString(R.string.time_unit));
}
TextView tvDiamond = (TextView) findViewById(R.id.level_diamond_reward);
tvDiamond.setText("+" + String.valueOf(resultInfo.getStars()));
TextView tvCoin = (TextView) findViewById(R.id.level_coin_reward);
tvCoin.setText("+" + String.valueOf(resultInfo.getScore() / 10));
TextView tvTaskTitle = (TextView) findViewById(R.id.dialog_title);
tvTaskTitle.setText(R.string.game_task_fail);
ImageView ivRecord = (ImageView) findViewById(R.id.task_pass);
ivRecord.setVisibility(View.INVISIBLE);
TextView btnAgainOrNext = (TextView) findViewById(R.id.btnAgainOrNext);
Drawable drawableAgain = getContext().getResources().getDrawable(R.drawable.again);
drawableAgain.setBounds(0, 0, drawableAgain.getMinimumWidth(), drawableAgain.getMinimumHeight());
btnAgainOrNext.setCompoundDrawables(null, drawableAgain, null, null);
btnAgainOrNext.setText(R.string.again);
btnAgainOrNext.setOnClickListener(againHandler);
if (resultInfo.isNewRecord()) {
tvTaskTitle.setText(R.string.game_task_success);
ivRecord.setVisibility(View.VISIBLE);
Drawable drawableNext = getContext().getResources().getDrawable(R.drawable.next);
drawableNext.setBounds(0, 0, drawableNext.getMinimumWidth(), drawableNext.getMinimumHeight());
btnAgainOrNext.setCompoundDrawables(null, drawableNext, null, null);
btnAgainOrNext.setText(R.string.next);
btnAgainOrNext.setOnClickListener(nextHandler);
}
if (levelTop != null) {
levelTop.reset();
}
uploadScore();
show();
}
private View.OnClickListener againHandler = new View.OnClickListener() {
@Override
public void onClick(View v) {
levelTop.cancelUrlImages();
cancel();
linkup.start();
}
};
private View.OnClickListener nextHandler = new View.OnClickListener() {
@Override
public void onClick(View v) {
levelTop.cancelUrlImages();
cancel();
linkup.next();
}
};
/**
* 上传分数
*/
private void uploadScore() {
// 判断是否已登录
if (!resultInfo.getUserId().equals("")) {
LevelInfo scoreInfo = new LevelInfo();
scoreInfo.setUserId(resultInfo.getUserId());
scoreInfo.setLevel(resultInfo.getLevel());
scoreInfo.setDiamond(resultInfo.getStars());
scoreInfo.setGold(resultInfo.getScore() / 10);
// 增加奖励的钻石和金币
WelcomeActivity.userInfo.addDiamond(getContext(), scoreInfo.getDiamond());
if (resultInfo.isNewRecord()) {
scoreInfo.setScore(resultInfo.getScore());
scoreInfo.setTime(resultInfo.getTime());
WelcomeActivity.userInfo.addGold(getContext(), scoreInfo.getGold());
UserScore.addGetResult(scoreInfo, levelTop.netMsgHandler);
} else {
if (!resultInfo.isUpload()) {
// 上传之前玩过还没上传的最高分
if ((linkup.getLevelCfg().getLevelMode() == GameMode.ScoreTask && resultInfo.getMaxScore() != 0)
|| (linkup.getLevelCfg().getLevelMode() == GameMode.TimeTask && resultInfo.getMinTime() != 0)) {
scoreInfo.setScore(resultInfo.getMaxScore());
scoreInfo.setTime(resultInfo.getMinTime());
WelcomeActivity.userInfo.addGold(getContext(), scoreInfo.getGold());
UserScore.addGetResult(scoreInfo, levelTop.netMsgHandler);
}
} else {
// 获取排行榜
UserScore.getLevelTops(resultInfo.getLevel(), levelTop.netMsgHandler);
}
}
} else {
// 没有登录则提示登录
}
}
@Override
public void onLoginSuccess(Message msg) {
UserInfo userInfo = WelcomeActivity.userInfo;
if (userInfo != null) {
resultInfo.setUserId(userInfo.getUserId());
uploadScore();
}
}
@Override
public void onLevelResultAdd(Message msg) {
// 更新是否已上传
linkup.getLevelCfg().setUpload(true);
LevelScore ls = new LevelScore(resultInfo.getLevel());
ls.setIsUpload(1);
DbScore.updateUpload(ls);
// 获取排行榜
// UserScore.getLevelTops(resultInfo.getLevel(), levelTop.netMsgHandler);
}
}