提交项目

This commit is contained in:
huangzhuanghua
2016-04-25 11:18:59 +08:00
commit 3f29f7b39a
660 changed files with 68059 additions and 0 deletions

View File

@ -0,0 +1,588 @@
package com.gh.gamecenter;
import java.io.File;
import java.util.HashMap;
import java.util.Map.Entry;
import org.json.JSONObject;
import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.os.Handler;
import android.text.Html;
import android.text.Spanned;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.gh.base.AppController;
import com.gh.base.BaseActivity;
import com.gh.common.constant.Config;
import com.gh.common.util.DialogUtils;
import com.gh.common.util.FileUtils;
import com.gh.common.util.MD5Utils;
import com.gh.common.util.PackageUtils;
import com.gh.common.util.SpeedUtils;
import com.gh.common.util.Utils;
import com.gh.download.DataWatcher;
import com.gh.download.DownloadEntry;
import com.gh.download.DownloadManager;
import com.gh.download.DownloadStatus;
import com.gh.gamecenter.entity.AppEntity;
import com.gh.gamecenter.entity.GameUpdateEntity;
import com.gh.gamecenter.manager.PackageManager;
import com.gh.gamecenter.volley.extended.JsonObjectExtendedRequest;
import com.google.gson.Gson;
import com.kyleduo.switchbutton.SwitchButton;
import com.tendcloud.tenddata.TCAgent;
/**
*
* 游戏设置页面
*
* @author 吕方
* @since 0814
*
*/
public class SettingActivity extends BaseActivity implements OnClickListener {
private SwitchButton setting_sb_autoinstall, setting_sb_autodelete,
setting_sb_deletedata, setting_sb_autoupdate;
private TextView setting_tv_version, app_tv_speed, app_tv_percent,
app_btn_cancel, setting_tv_cache;
private ProgressBar app_pb_progress;
private SharedPreferences sp;
private Dialog dialog = null;
private AppEntity appEntity;
private boolean isChecking = false;
private boolean isShowDownload = false;
private Handler handler = new Handler();
private DataWatcher dataWatcher = new DataWatcher() {
@Override
public void onDataChanged(HashMap<String, DownloadEntry> downloads) {
for (Entry<String, DownloadEntry> entry : downloads.entrySet()) {
DownloadEntry downloadEntry = entry.getValue();
if (downloadEntry.getName().contains("光环助手") && isShowDownload) {
app_tv_speed.setText(SpeedUtils.getSpeed(downloadEntry
.getSpeed())
+ "(剩"
+ SpeedUtils.getRemainTime(downloadEntry.getSize(),
downloadEntry.getProgress(),
downloadEntry.getSpeed() * 1024) + ")");
app_pb_progress.setProgress((int) (downloadEntry
.getPercent() * 10));
app_tv_percent.setText(downloadEntry.getPercent() + "%");
if (DownloadStatus.done.equals(downloadEntry.getStatus())) {
DownloadManager.getInstance(getApplicationContext())
.cancel(downloadEntry.getUrl(), false);
if (appEntity != null && appEntity.isIs_force()) {
AppController.getInstance().finishActivity();
} else {
if (dialog != null) {
dialog.dismiss();
}
isShowDownload = false;
}
}
}
}
}
};
@Override
public void finish() {
saveCurrentSetting();
super.finish();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View contentView = View.inflate(this, R.layout.activity_setting, null);
init(contentView, "设置");
findViewById(R.id.setting_rl_autoinstall).setOnClickListener(this);
findViewById(R.id.setting_rl_autodelete).setOnClickListener(this);
findViewById(R.id.setting_rl_deletedata).setOnClickListener(this);
findViewById(R.id.setting_rl_autoupdate).setOnClickListener(this);
findViewById(R.id.setting_rl_update).setOnClickListener(this);
findViewById(R.id.setting_rl_feedback).setOnClickListener(this);
findViewById(R.id.setting_rl_cache).setOnClickListener(this);
if (AppController.get("user", false) != null) {
findViewById(R.id.setting_tv_account).setOnClickListener(this);
} else {
findViewById(R.id.setting_tv_account).setVisibility(View.GONE);
}
setting_tv_version.setText("当前版本V"
+ PackageUtils.getVersion(getApplicationContext()));
setting_tv_cache.setText(getCacheSize());
sp = getSharedPreferences(Config.PREFERENCE, Activity.MODE_PRIVATE);
setting_sb_autoinstall.setChecked(sp.getBoolean("autoinstall", true));
setting_sb_autodelete.setChecked(sp.getBoolean("autodelete", true));
setting_sb_deletedata.setChecked(sp.getBoolean("deletedata", true));
setting_sb_autoupdate.setChecked(sp.getBoolean("autoupdate", true));
if (sp.getBoolean("isShowDisclaimer", false)) {
TextView setting_tv_disclaimer = (TextView) findViewById(R.id.setting_tv_disclaimer);
setting_tv_disclaimer.setVisibility(View.VISIBLE);
setting_tv_disclaimer.setOnClickListener(this);
}
}
// 获取缓存大小
private String getCacheSize() {
File ecDir = getExternalCacheDir();
long cacheLength = getFolderSize(getCacheDir());
if (ecDir != null) {
cacheLength += getFolderSize(ecDir);
}
return long2Size(cacheLength);
}
private long getFolderSize(File folder) {
long size = 0;
size += folder.length();
if (folder.isDirectory()) {
for (File file : folder.listFiles()) {
if (file.isDirectory()) {
size += getFolderSize(file);
} else {
size += file.length();
}
}
}
return size;
}
private String long2Size(Long length) {
float m = length / 1024f / 1024f;
String str = Float.toString(m);
int index = str.lastIndexOf(".");
if (index != -1 && str.length() > index + 3) {
str = str.substring(0, index + 3);
}
return str + "M";
}
private void saveCurrentSetting() {
Editor mEditor = sp.edit();
mEditor.putBoolean("autoinstall", setting_sb_autoinstall.isChecked());
mEditor.putBoolean("autodelete", setting_sb_autodelete.isChecked());
mEditor.putBoolean("deletedata", setting_sb_deletedata.isChecked());
mEditor.putBoolean("autoupdate", setting_sb_autoupdate.isChecked());
mEditor.apply();
}
@Override
public void onClick(final View v) {
switch (v.getId()) {
case R.id.actionbar_rl_back:
finish();
break;
case R.id.setting_rl_autoinstall:
setting_sb_autoinstall.performClick();
break;
case R.id.setting_rl_autodelete:
setting_sb_autodelete.performClick();
break;
case R.id.setting_rl_deletedata:
setting_sb_deletedata.performClick();
break;
case R.id.setting_rl_autoupdate:
setting_sb_autoupdate.performClick();
break;
case R.id.setting_rl_update:
dialog = DialogUtils.showWaitDialog(this, "检查更新中...");
if (isChecking)
break;
isChecking = true;
checkUpdate();
break;
case R.id.setting_rl_cache:
dialog = DialogUtils.showWaitDialog(this, "清除缓存中...");
claerCache();
break;
case R.id.setting_rl_feedback:
startActivity(new Intent(SettingActivity.this,
SuggestionActivity.class));
break;
case R.id.setting_tv_disclaimer:
String content = sp.getString("disclaimer", null);
if (!TextUtils.isEmpty(content)) {
showDisclaimerDialog(content);
}
break;
case R.id.setting_tv_account:
startActivity(new Intent(SettingActivity.this,
AccountActivity.class));
break;
default:
break;
}
}
// 清除缓存
private void claerCache() {
new Thread() {
@Override
public void run() {
long start = System.currentTimeMillis();
deleteFolder(getCacheDir());
deleteFolder(getExternalCacheDir());
long time = System.currentTimeMillis() - start;
if (time < 1000) {
try {
sleep(1000 - time);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if (dialog != null) {
dialog.dismiss();
}
handler.post(new Runnable() {
@Override
public void run() {
setting_tv_cache.setText(getCacheSize());
}
});
}
}.start();
}
private void deleteFolder(File folder) {
if (folder != null) {
if (folder.isDirectory()) {
for (File file : folder.listFiles()) {
if (file.isDirectory()) {
deleteFolder(file);
} else {
file.delete();
}
}
}
folder.delete();
}
}
// 弹出免责声明的窗口
private void showDisclaimerDialog(String content) {
final Dialog disclaimerDialog = new Dialog(this);
View view = View
.inflate(this, R.layout.setting_disclaimer_dialog, null);
TextView title = (TextView) view
.findViewById(R.id.disclaimer_dialog_title);
title.setText("免责声明");
TextView message = (TextView) view
.findViewById(R.id.disclaimer_dialog_message);
Spanned spanned = Html.fromHtml(content);
message.setText(spanned);
view.findViewById(R.id.disclaimer_dialog_confirm).setOnClickListener(
new OnClickListener() {
@Override
public void onClick(View v) {
disclaimerDialog.dismiss();
}
});
disclaimerDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
disclaimerDialog.setContentView(view);
disclaimerDialog.show();
}
private void checkUpdate() {
String TD_CHANNEL_ID = (String) PackageUtils.getMetaData(this,
getPackageName(), "TD_CHANNEL_ID");
String url = Config.HOST + "v2/version?version_name="
+ PackageUtils.getVersion(getApplicationContext())
+ "&channel=" + TD_CHANNEL_ID;
JsonObjectExtendedRequest request = new JsonObjectExtendedRequest(url,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
isChecking = false;
if (dialog != null) {
dialog.dismiss();
}
if (response.length() == 0) {
Toast.makeText(SettingActivity.this, "已是最新版本",
Toast.LENGTH_SHORT).show();
} else {
Gson gson = new Gson();
appEntity = gson.fromJson(response.toString(),
AppEntity.class);
float version = Float.valueOf(appEntity
.getVersion());
float currentVersion = Float.valueOf(PackageUtils
.getVersion(getApplicationContext()));
if (version > currentVersion) {
// 光环助手 有更新
GameUpdateEntity game = new GameUpdateEntity();
game.setName("光环助手V" + appEntity.getVersion());
game.setPackageName(getPackageName());
game.setSize(appEntity.getSize());
game.setVersion(appEntity.getVersion());
game.setUrl(appEntity.getUrl());
game.setPlatform("官方版");
PackageManager.addUpdate(0, game);
String updateMD5 = MD5Utils.getUpdateMD5(
appEntity.getUrl(),
appEntity.getContent());
showUpdateDialog(updateMD5);
} else {
showCancelDialog();
}
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
isChecking = false;
if (dialog != null) {
dialog.dismiss();
}
Utils.log("error = " + error.toString());
Toast.makeText(SettingActivity.this, "检查更新失败",
Toast.LENGTH_SHORT).show();
}
});
AppController.addToRequestQueue(request, SettingActivity.class);
}
private void showUpdateDialog(final String md5) {
dialog = new Dialog(this);
View view = View.inflate(this, R.layout.search_history_delete_dialog,
null);
TextView title = (TextView) view.findViewById(R.id.delete_dialog_title);
title.setText("更新");
TextView content = (TextView) view
.findViewById(R.id.delete_dialog_message);
Spanned dialogContent = Html
.fromHtml("<p>发现新版本!</p>"
+ "<font color='#1ba4fc' style='line-height:1.5'>更新不会影响用户信息!</font><br>"
+ "<font style='line-height:1.5'>最新版本:</font><font color='#3D3D3D' style='line-height:1.5'><b>V"
+ appEntity.getVersion()
+ "</b></font><br>"
+ "<font style='line-height:1.5'>更新包大小:</font><font color='#3D3D3D' style='line-height:1.5'><b>"
+ appEntity.getSize()
+ "</b></font><br>"
+ "更新内容:<br><font color='#2E2E2E' style='line-height:1.5'><b>"
+ appEntity.getContent() + "</b></font><br>"
+ "<br> 确定更新吗?");
content.setText(dialogContent);
if (appEntity.isIs_force()) {
dialog.setCanceledOnTouchOutside(false);
dialog.setCancelable(false);
}
view.findViewById(R.id.delete_dialog_cancel).setOnClickListener(
new OnClickListener() {
@Override
public void onClick(View v) {
if (appEntity.isIs_force()) {
Intent data = new Intent();
data.putExtra("isForce", true);
setResult(RESULT_OK, data);
finish();
} else {
if (dialog != null) {
dialog.dismiss();
}
}
}
});
view.findViewById(R.id.delete_dialog_confirm).setOnClickListener(
new OnClickListener() {
@Override
public void onClick(View v) {
if (dialog != null) {
dialog.dismiss();
}
String path = FileUtils.getDownloadPath(
SettingActivity.this,
"光环助手V" + appEntity.getVersion() + "_" + md5
+ ".apk");
File file = new File(path);
if (file.exists() && file.length() > 0) {
startActivity(PackageUtils.getInstallIntent(path));
} else {
TCAgent.onEvent(SettingActivity.this, "软件更新",
"下载开始");
showDownloadDialog(md5);
}
}
});
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(view);
dialog.show();
}
private void showDownloadDialog(String md5) {
dialog = new Dialog(SettingActivity.this);
dialog.setCanceledOnTouchOutside(false);
dialog.setCancelable(false);
dialog.closeOptionsMenu();
View view = View.inflate(this, R.layout.app_updating_dialog, null);
app_pb_progress = (ProgressBar) view.findViewById(R.id.app_pb_progress);
app_tv_speed = (TextView) view.findViewById(R.id.app_tv_speed);
app_tv_percent = (TextView) view.findViewById(R.id.app_tv_percent);
app_btn_cancel = (TextView) view.findViewById(R.id.app_btn_cancel);
app_btn_cancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
DownloadManager.getInstance(getApplicationContext()).cancel(
appEntity.getUrl());
if (appEntity.isIs_force()) {
Intent data = new Intent();
data.putExtra("isForce", true);
setResult(RESULT_OK, data);
finish();
} else {
if (dialog != null) {
dialog.dismiss();
}
isShowDownload = false;
}
}
});
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(view);
dialog.show();
isShowDownload = true;
String path = FileUtils.getDownloadPath(SettingActivity.this, "光环助手V"
+ appEntity.getVersion() + "_" + md5 + ".apk");
File file = new File(path);
if (file.exists()) {
file.delete();
}
DownloadEntry downloadEntry = new DownloadEntry();
downloadEntry.setUrl(appEntity.getUrl());
downloadEntry.setName("光环助手V" + appEntity.getVersion());
downloadEntry.setPath(path);
HashMap<String, String> meta = new HashMap<String, String>();
meta.put("platform", "官方版");
downloadEntry.setMeta(meta);
DownloadManager.getInstance(getApplicationContext()).cancel(
downloadEntry.getUrl(), false);
DownloadManager.getInstance(getApplicationContext()).pauseAll();
DownloadManager.getInstance(getApplicationContext()).add(downloadEntry);
}
private void showCancelDialog() {
final Dialog dialog = new Dialog(SettingActivity.this);
View view = View.inflate(SettingActivity.this,
R.layout.search_history_delete_dialog, null);
TextView title = (TextView) view.findViewById(R.id.delete_dialog_title);
title.setText("更新提示");
TextView content = (TextView) view
.findViewById(R.id.delete_dialog_message);
content.setText("已经是最新版本!");
view.findViewById(R.id.delete_dialog_rl_cancel)
.setVisibility(View.GONE);
view.findViewById(R.id.delete_dialog_rl_confirm).setVisibility(
View.VISIBLE);
TextView cancel = (TextView) view
.findViewById(R.id.delete_dialog_confirm);
cancel.setVisibility(View.VISIBLE);
cancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(view);
dialog.show();
}
@Override
public void onResume() {
super.onResume();
DownloadManager.getInstance(SettingActivity.this).addObserver(
dataWatcher);
}
@Override
public void onPause() {
saveCurrentSetting();
super.onPause();
DownloadManager.getInstance(SettingActivity.this).removeObserver(
dataWatcher);
}
@Override
protected void onDestroy() {
saveCurrentSetting();
super.onDestroy();
setting_sb_autoinstall = null;
setting_sb_autodelete = null;
setting_sb_deletedata = null;
setting_sb_autoupdate = null;
setting_tv_version = null;
app_tv_speed = null;
app_tv_percent = null;
app_btn_cancel = null;
setting_tv_cache = null;
app_pb_progress = null;
sp = null;
dialog = null;
appEntity = null;
handler = null;
dataWatcher = null;
}
}