586 lines
22 KiB
Java
586 lines
22 KiB
Java
package com.gh.gamecenter;
|
||
|
||
import android.app.Activity;
|
||
import android.app.Dialog;
|
||
import android.content.Context;
|
||
import android.content.Intent;
|
||
import android.content.SharedPreferences;
|
||
import android.content.SharedPreferences.Editor;
|
||
import android.os.Bundle;
|
||
import android.os.Handler;
|
||
import android.text.TextUtils;
|
||
import android.view.LayoutInflater;
|
||
import android.view.View;
|
||
import android.view.View.OnClickListener;
|
||
import android.view.Window;
|
||
import android.widget.ProgressBar;
|
||
import android.widget.RadioButton;
|
||
import android.widget.RadioGroup;
|
||
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.DataUtils;
|
||
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.DownloadEntity;
|
||
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.eventbus.EBReuse;
|
||
import com.gh.gamecenter.manager.PackageManager;
|
||
import com.gh.gamecenter.volley.extended.JsonObjectExtendedRequest;
|
||
import com.google.gson.Gson;
|
||
import com.kyleduo.switchbutton.SwitchButton;
|
||
|
||
import org.json.JSONObject;
|
||
|
||
import java.io.File;
|
||
|
||
import de.greenrobot.event.EventBus;
|
||
|
||
/**
|
||
* 游戏设置页面
|
||
*
|
||
* @author 吕方
|
||
* @since 0814
|
||
*/
|
||
public class SettingActivity extends BaseActivity implements OnClickListener {
|
||
|
||
public static final String TAG = SettingActivity.class.getSimpleName();
|
||
|
||
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,setting_tv_size;
|
||
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 int checkSizeIndex;
|
||
|
||
private Context context = this;
|
||
|
||
private DataWatcher dataWatcher = new DataWatcher() {
|
||
@Override
|
||
public void onDataChanged(DownloadEntity downloadEntity) {
|
||
if (downloadEntity.getName().contains("光环助手") && isShowDownload) {
|
||
app_tv_speed.setText(String.format("%s(剩%s)",
|
||
SpeedUtils.getSpeed(downloadEntity.getSpeed()),
|
||
SpeedUtils.getRemainTime(downloadEntity.getSize(), downloadEntity.getProgress(),
|
||
downloadEntity.getSpeed() * 1024)));
|
||
app_pb_progress.setProgress((int) (downloadEntity.getPercent() * 10));
|
||
app_tv_percent.setText(downloadEntity.getPercent() + "%");
|
||
if (DownloadStatus.done.equals(downloadEntity.getStatus())) {
|
||
DownloadManager.getInstance(getApplicationContext())
|
||
.cancel(downloadEntity.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);
|
||
findViewById(R.id.setting_cv_font_size).setOnClickListener(this);
|
||
|
||
setting_tv_version.setText("当前版本:V"
|
||
+ PackageUtils.getVersion(getApplicationContext()));
|
||
|
||
setting_tv_cache.setText(getCacheSize());
|
||
|
||
sp = getSharedPreferences(Config.PREFERENCE, Activity.MODE_PRIVATE);
|
||
|
||
// 未打开下载按钮,显示修复下载按钮
|
||
if (!sp.getBoolean("isShow", false)) {
|
||
findViewById(R.id.setting_cv_fix_download).setVisibility(View.VISIBLE);
|
||
findViewById(R.id.setting_cv_fix_download).setOnClickListener(this);
|
||
}
|
||
|
||
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);
|
||
findViewById(R.id.setting_disclaimer_line).setVisibility(View.VISIBLE);
|
||
setting_tv_disclaimer.setVisibility(View.VISIBLE);
|
||
setting_tv_disclaimer.setOnClickListener(this);
|
||
}
|
||
|
||
checkSizeIndex = sp.getInt("fontsize", 1);
|
||
if (checkSizeIndex == 0){
|
||
checkSizeIndex = 1;
|
||
}
|
||
fontTextSize(checkSizeIndex);
|
||
}
|
||
|
||
// 获取缓存大小
|
||
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.putInt("fontsize",checkSizeIndex);
|
||
mEditor.apply();
|
||
}
|
||
|
||
@Override
|
||
public void onClick(final View v) {
|
||
switch (v.getId()) {
|
||
case R.id.actionbar_rl_back:
|
||
finish();
|
||
break;
|
||
case R.id.setting_cv_fix_download:
|
||
sp.edit().putBoolean("isShow", true).apply();
|
||
toast("修复成功,快去首页看看吧");
|
||
EventBus.getDefault().post(new EBReuse("Refresh"));
|
||
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:
|
||
DialogUtils.showWarningDialog(this, "清除缓存", "清空缓存后未安装的游戏可能需要重新下载,确定清空?",
|
||
new DialogUtils.ConfiremListener() {
|
||
@Override
|
||
public void onConfirem() {
|
||
dialog = DialogUtils.showWaitDialog(context, "清除缓存中...");
|
||
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)) {
|
||
DialogUtils.showDisclaimerDialog(this, content);
|
||
}
|
||
break;
|
||
case R.id.setting_cv_font_size:
|
||
fontSize();
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
private void fontTextSize(int i){
|
||
switch (i){
|
||
case 1:
|
||
setting_tv_size.setText("小字号");
|
||
break;
|
||
case 2:
|
||
setting_tv_size.setText("中字号");
|
||
break;
|
||
case 3:
|
||
setting_tv_size.setText("大字号");
|
||
break;
|
||
case 4:
|
||
setting_tv_size.setText("特大字号");
|
||
break;
|
||
}
|
||
}
|
||
|
||
//设置正文字号
|
||
private void fontSize() {
|
||
final Dialog dialog = new Dialog(this);
|
||
View inflate = LayoutInflater.from(this).inflate(R.layout.dialog_font_size, null);
|
||
TextView tv_negative = (TextView) inflate.findViewById(R.id.font_size_negative);
|
||
TextView tv_positive = (TextView) inflate.findViewById(R.id.font_size_positive);
|
||
final RadioGroup radioGroup = (RadioGroup) inflate.findViewById(R.id.font_size_radiogroup);
|
||
((RadioButton)(radioGroup.getChildAt(checkSizeIndex-1))).setChecked(true);
|
||
|
||
tv_negative.setOnClickListener(new OnClickListener() {
|
||
@Override
|
||
public void onClick(View v) {
|
||
dialog.cancel();
|
||
}
|
||
});
|
||
tv_positive.setOnClickListener(new OnClickListener() {
|
||
@Override
|
||
public void onClick(View v) {
|
||
checkSizeIndex = radioGroup.getCheckedRadioButtonId() % 4;
|
||
|
||
if (checkSizeIndex == 0){
|
||
checkSizeIndex = 4;
|
||
}
|
||
dialog.cancel();
|
||
saveCurrentSetting();
|
||
fontTextSize(checkSizeIndex);
|
||
}
|
||
});
|
||
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
|
||
dialog.setContentView(inflate);
|
||
dialog.show();
|
||
}
|
||
|
||
// 清除缓存
|
||
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());
|
||
Toast.makeText(SettingActivity.this, "缓存清除成功", Toast.LENGTH_SHORT).show();
|
||
}
|
||
});
|
||
}
|
||
}.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 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("您的光环助手已是最新版本");
|
||
} 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 {
|
||
toast("已是最新版本");
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
}, new Response.ErrorListener() {
|
||
@Override
|
||
public void onErrorResponse(VolleyError error) {
|
||
isChecking = false;
|
||
if (dialog != null) {
|
||
dialog.dismiss();
|
||
}
|
||
|
||
Utils.log("error = " + error.toString());
|
||
|
||
toast("检查更新失败");
|
||
}
|
||
});
|
||
AppController.addToRequestQueue(request, TAG);
|
||
}
|
||
|
||
private void showUpdateDialog(final String md5) {
|
||
dialog = new Dialog(this);
|
||
View view = View.inflate(this, R.layout.app_update_hint_dialog,
|
||
null);
|
||
TextView content = (TextView) view
|
||
.findViewById(R.id.updeta_content);
|
||
TextView size = (TextView) view
|
||
.findViewById(R.id.update_app_size);
|
||
TextView versison = (TextView) view.findViewById(R.id.update_app_version);
|
||
|
||
versison.setText("光环助手V"+appEntity.getVersion()+"更新内容:");
|
||
size.setText("大小:"+appEntity.getSize());
|
||
content.setText(appEntity.getContent()+"");
|
||
|
||
if (appEntity.isIs_force()) {
|
||
dialog.setCanceledOnTouchOutside(false);
|
||
dialog.setCancelable(false);
|
||
}
|
||
view.findViewById(R.id.update_cannel).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.updeta_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 {
|
||
DataUtils.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_tv_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();
|
||
}
|
||
|
||
DownloadEntity downloadEntity = new DownloadEntity();
|
||
downloadEntity.setUrl(appEntity.getUrl());
|
||
downloadEntity.setName("光环助手V" + appEntity.getVersion());
|
||
downloadEntity.setPath(path);
|
||
downloadEntity.setPlatform("官方版");
|
||
downloadEntity.setPackageName(getPackageName());
|
||
|
||
DownloadManager.getInstance(getApplicationContext()).cancel(
|
||
downloadEntity.getUrl(), false);
|
||
|
||
DownloadManager.getInstance(getApplicationContext()).pauseAll();
|
||
|
||
DownloadManager.getInstance(getApplicationContext()).add(downloadEntity);
|
||
}
|
||
|
||
@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();
|
||
AppController.canclePendingRequests(TAG);
|
||
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;
|
||
}
|
||
}
|