package com.qiwenge.android.async;
import android.app.Activity;
import android.app.DownloadManager;
import android.content.Context;
import android.net.Uri;
import com.liuguangqiang.framework.utils.AppUtils;
import com.liuguangqiang.framework.utils.ToastUtils;
import com.qiwenge.android.R;
import com.qiwenge.android.constant.Constants;
import com.qiwenge.android.entity.Configures;
import com.qiwenge.android.listeners.OnPositiveClickListener;
import com.qiwenge.android.ui.dialogs.MyDialog;
import com.qiwenge.android.utils.ApiUtils;
import com.qiwenge.android.utils.DialogUtils;
import com.qiwenge.android.utils.http.JHttpClient;
import com.qiwenge.android.utils.http.JsonResponseHandler;
/**
* 检查版本更新。
* <p/>
* Created by applemac on 14-8-3.
*/
public class AsyncCheckUpdate {
private Activity mAct;
private boolean onlyCheck = false;
private AsyncCheckUpdate() {
}
public AsyncCheckUpdate(Activity acitivity) {
this.mAct = acitivity;
}
/**
* 设置只检查模式,不提醒,当前已经是最新版本
*/
public void setOnlyCheck() {
this.onlyCheck = true;
}
public void checkUpdate() {
if (mAct == null) return;
String url = ApiUtils.getConfigures();
JHttpClient.get(null, url, null, new JsonResponseHandler<Configures>(Configures.class, false) {
@Override
public void onStart() {
if (!onlyCheck)
DialogUtils.showLoading(mAct);
}
@Override
public void onFinish() {
if (!onlyCheck)
DialogUtils.hideLoading();
}
@Override
public void onSuccess(Configures result) {
if (result != null && result.upgrade != null) {
if (checkIsLatestVersion(AppUtils.getVersionName(mAct.getApplicationContext()), result.upgrade.android.ver)) {
if (!onlyCheck)
ToastUtils.show(mAct.getApplicationContext(), mAct.getString(R.string.update_current_is_latest));
} else {
showUpdateDailog(result);
}
}
}
});
}
private MyDialog logoutDialog;
private void showUpdateDailog(final Configures result) {
String title = mAct.getString(R.string.update_title);
String message = String.format(mAct.getString(R.string.update_message), result.upgrade.android.ver);
String sure = mAct.getString(R.string.update_sure);
String cancel = mAct.getString(R.string.update_cancel);
if (logoutDialog == null) {
logoutDialog = new MyDialog(mAct, title);
logoutDialog.setMessage(message);
logoutDialog.setCancelable(false);
logoutDialog.setPositiveButton(sure, cancel, new OnPositiveClickListener() {
@Override
public void onClick() {
downloadLatest(mAct.getApplicationContext(), result.upgrade.android.url,
result.upgrade.android.ver);
}
});
}
logoutDialog.show();
}
public void downloadLatest(Context context, String url, String ver) {
DownloadManager downloadManager =
(DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
Uri uri = Uri.parse(url);
DownloadManager.Request request = new DownloadManager.Request(uri);
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE
| DownloadManager.Request.NETWORK_WIFI);
request.setVisibleInDownloadsUi(false);
request.setMimeType("application/vnd.android.package-archive");
request.setTitle(String.format(context.getString(R.string.app_name) + " v%s", ver));
Constants.UPDATE_DOWNLOAD_ID = downloadManager.enqueue(request);
}
public boolean checkIsLatestVersion(String localVersion, String serverVersion) {
if (localVersion == null || localVersion.length() == 0) {
return false;
}
if (localVersion.equals(serverVersion)) {
return true;
}
String[] arrayLocal = localVersion.replace(".", "-").split("-");
String[] arrayServer = serverVersion.replace(".", "-").split("-");
if (arrayLocal.length == 0 || arrayServer.length == 0) {
return false;
}
int count = Math.max(arrayLocal.length, arrayServer.length);
int local = 0;
int server = 0;
for (int i = 0; i < count; i++) {
local = 0;
server = 0;
if (i < arrayLocal.length) {
local = Integer.parseInt(arrayLocal[i]);
}
if (i < arrayServer.length) {
server = Integer.parseInt(arrayServer[i]);
}
if (local > server) {
return true;
}
if (local < server) {
return false;
}
}
return false;
}
}