package basic.update;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.view.View;
import android.view.WindowManager;
import android.widget.Toast;
import com.wasu.cs.widget.WAlertDialog;
import com.wasu.module.log.WLog;
import com.wasu.util.ShellUtils;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import basic.app.TvAppLike;
import basic.update.model.UpdateInfo;
import cn.com.wasu.main.R;
/**
* Created by fanwang on 9/13/16.
* this util is only used for update api
*/
public class UpdateUtil {
private static final String TAG = "UpdateUtil";
/**
* 组装post数据
*
* @return
*/
public static String composeRequestBody(Context context, String mPlatformInfo) {
String xml = "";
try {
xml = "" +
"" +
"" +
"" + mPlatformInfo + "" +
"xml" +
"" +
"" + context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName + "" +
"" +
"" +
"";
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return xml;
}
/**
* 读取返回数据
*
* @param repString
* @return
*/
public static Map parseResponse(String repString) {
ByteArrayInputStream is = new ByteArrayInputStream(repString.getBytes());
Map result = new HashMap();
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser parser = factory.newPullParser();
parser.setInput(is, "UTF-8");
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
break;
case XmlPullParser.START_TAG:
String name = parser.getName();
if (name.equalsIgnoreCase(UpdateInfo.NEEDUPDATE)) {
result.put(UpdateInfo.NEEDUPDATE, parser.nextText());
} else if (name.equalsIgnoreCase(UpdateInfo.UPDATEVERSION)) {
result.put(UpdateInfo.UPDATEVERSION, parser.nextText());
} else if (name.equalsIgnoreCase(UpdateInfo.UPDATEINFO)) {
result.put(UpdateInfo.UPDATEINFO, parser.nextText());
} else if (name.equalsIgnoreCase(UpdateInfo.UPDATEURL)) {
result.put(UpdateInfo.UPDATEURL, parser.nextText());
}
break;
case XmlPullParser.END_TAG:
break;
}
eventType = parser.next();
}
if (is != null) {
is.close();
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public static void wasuShowForceUpdateUI() {
showUpdateDialog(false);
}
public static void wasuShowNotifyUpdateUI() {
showUpdateDialog(true);
}
public static void wasuShowApkUpdatSuccessUI() {
Toast.makeText(TvAppLike.getContext(), "升级完成", Toast.LENGTH_LONG).show();
}
public static void wasuShowApkUpdateFailedUI() {
Toast.makeText(TvAppLike.getContext(), "此次升级失败,请稍后再尝试", Toast.LENGTH_LONG).show();
}
private static WAlertDialog dialog = null;
/**
* @param cancelable 是否可以取消对话框
*/
private static void showUpdateDialog(boolean cancelable) {
WLog.i(TAG, "showUpdateDialog");
if (dialog == null) {
//show a choice dialog,when user choice ok,we do download apk
dialog = new WAlertDialog(TvAppLike.getContext(), R.style.update_dialog);
dialog.setTitle("发现新版本,是否升级?");
dialog.setMessage(ApkPathManager.getsInstance().getServerMsg());
dialog.setPositiveButton("确定", new View.OnClickListener() {
@Override
public void onClick(View v) {
//new apk file downloaded successfullyT
File tmpFile = new File(ApkPathManager.getsInstance().getSavePath(),
ApkPathManager.getsInstance().getSaveName());
// 加上.apk后缀名
ShellUtils.execCommand("mv " + tmpFile.getAbsolutePath() + " " + tmpFile.getAbsolutePath() + ".apk", false, true);
final File apkfile = new File(ApkPathManager.getsInstance().getSavePath(), ApkPathManager.getsInstance().getSaveName() + ".apk");
if (!apkfile.exists()) {
return;
}
//将文件权限改为666
ShellUtils.CommandResult shellRet = ShellUtils.execCommand("chmod 666 " + apkfile.getAbsolutePath(), false, true);
//install apk
Uri uri = Uri.fromFile(apkfile);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uri, "application/vnd.android.package-archive");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
TvAppLike.getContext().startActivity(intent);
// when install apk,结束应用,防止用户点击安装后又取消安装
android.os.Process.killProcess(android.os.Process.myPid());
}
});
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
}
dialog.setCancelable(cancelable);
if (!dialog.isShowing()) {
dialog.show();
}
}
}