package my.project.easyrecharge.activity;
import my.project.easyrecharge.F;
import my.project.easyrecharge.F.Method;
import my.project.easyrecharge.R;
import my.project.easyrecharge.model.VersionServer;
import my.project.easyrecharge.util.UpdateApkUtil;
import my.project.easyrecharge.view.NewAlertDialog.OnDialogBtnClickListener;
import android.content.Context;
import android.os.AsyncTask;
/**
* Update app(Download and install)
*
* @author roy
* @email onecoders@gmail.com
*/
public class ActUpdateApk extends ActDataload {
public static final String APK_SAVE_NAME = "easyrecharge.apk";
private boolean needUpdate;
private VersionServer version;
private boolean needHint;
// cancel download task by invoking task.cancel(true)
// and override onCancelled()
private DownloadTask task;
// check update info from server
protected void checkUpdate(boolean needHint) {
this.needHint = needHint;
loadDataVolley(needHint, Method.QUERY_VERSION, "");
}
@Override
protected void disposeResult(String apiName, String content) {
super.disposeResult(apiName, content);
if (!apiName.equals(Method.QUERY_VERSION))
return;
try {
version = fromJson(content, VersionServer.class);
needUpdate = version.getVersionCode() > F.VERSION_CODE;
if (needUpdate) {
doNewVersionUpdate();
} else {
if (needHint)
noNewVersion();
}
} catch (Exception e) {
e.printStackTrace();
showToast(R.string.error_data);
}
}
// no new version available
private void noNewVersion() {
String message = getUpdateInfo();
showDialog(R.string.update_dialog_title, message, R.string.confirm,
true, 0, null);
}
// new version available on server
private void doNewVersionUpdate() {
String message = getUpdateInfo();
showDialog(R.string.update_dialog_title, message, R.string.update_now,
false, R.string.update_not_now, new OnDialogBtnClickListener() {
@Override
public void onLeftBtnClick() {
doUpdate();
}
@Override
public void onRightBtnClick() {
}
});
}
private String getUpdateInfo() {
return getString(needUpdate ? R.string.find_new_version_message
: R.string.already_newest_message);
}
// update app, download apk and install
protected void doUpdate() {
task = new DownloadTask(this);
if (isNetworkConnected()) {
task.execute(F.APK_DOWNLOAD_URL, APK_SAVE_NAME);
} else {
showToast(R.string.network_ungelivable);
}
}
class DownloadTask extends AsyncTask<String, Integer, Boolean> implements
UpdateApkUtil.OnUpdateProgressListener {
private Context context;
private UpdateApkUtil updateUtil;
public DownloadTask(Context context) {
this.context = context;
this.updateUtil = new UpdateApkUtil(this);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
showProgressHUD();
}
@Override
protected Boolean doInBackground(String... params) {
return updateUtil.downloadFile(params[0], params[1]);
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
updateMessage(values[0]);
}
@Override
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
setMessage(getString(result ? R.string.download_finish
: R.string.download_failed));
dismissProgressHUD();
if (result) {
// install apk
updateUtil.installApk(context);
}
}
@Override
public void updateProgress(int progress) {
publishProgress(progress);
}
}
}