package com.android.chmo.ui.dialog; import android.app.AlertDialog; import android.app.Dialog; import android.app.ProgressDialog; import android.content.Context; import android.os.Bundle; import android.support.annotation.NonNull; import android.util.Log; import android.util.TypedValue; import android.view.Gravity; import android.view.Window; import android.view.WindowManager; import android.widget.TextView; import com.android.chmo.R; import com.android.chmo.ui.activity.MainActivity; import com.blankj.utilcode.util.AppUtils; import com.liulishuo.filedownloader.BaseDownloadTask; import com.liulishuo.filedownloader.FileDownloadListener; import com.liulishuo.filedownloader.FileDownloader; import java.io.File; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; public class UpdateDialog extends Dialog { private String version, desc, url; @BindView(R.id.tv_version) TextView tvVersion; @BindView(R.id.tv_desc) TextView tvDesc; private UpdateDialog(@NonNull Context context, String version, String desc, String url) { super(context, R.style.DialogStyle); this.version = version; this.desc = desc; this.url = url; } public static void Present(Context context, String version, String desc, String url) { UpdateDialog updateDialo = new UpdateDialog(context, version, desc, url); updateDialo.show(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.dialog_update); ButterKnife.bind(this); Window window = getWindow(); WindowManager.LayoutParams wlp = window.getAttributes(); wlp.gravity = Gravity.CENTER; window.setAttributes(wlp); window.setWindowAnimations(R.style.DialogAnimation); int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 280, getContext().getResources().getDisplayMetrics()); window.setLayout(width, WindowManager.LayoutParams.WRAP_CONTENT); setCancelable(false); tvVersion.setText(version); tvDesc.setText(desc); } @OnClick(R.id.btn_update) void update() { final File file = new File(getContext().getExternalCacheDir(), "update" + System.currentTimeMillis() + ".apk"); final ProgressDialog progressDialog = new ProgressDialog(getContext(), AlertDialog.THEME_DEVICE_DEFAULT_LIGHT); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setTitle("正在下载"); progressDialog.setProgress(0); progressDialog.setCancelable(false); progressDialog.show(); FileDownloader.getImpl().create(url) .setPath(file.getPath()) .setListener(new FileDownloadListener() { @Override protected void pending(BaseDownloadTask task, int soFarBytes, int totalBytes) { } @Override protected void connected(BaseDownloadTask task, String etag, boolean isContinue, int soFarBytes, int totalBytes) { progressDialog.show(); } @Override protected void progress(BaseDownloadTask task, int soFarBytes, int totalBytes) { progressDialog.setProgress((int) (soFarBytes * 100L / totalBytes)); } @Override protected void blockComplete(BaseDownloadTask task) { } @Override protected void retry(final BaseDownloadTask task, final Throwable ex, final int retryingTimes, final int soFarBytes) { } @Override protected void completed(BaseDownloadTask task) { AppUtils.installApp(file, "com.android.chmo.fileProvider"); progressDialog.dismiss(); } @Override protected void paused(BaseDownloadTask task, int soFarBytes, int totalBytes) { } @Override protected void error(BaseDownloadTask task, Throwable e) { progressDialog.dismiss(); new AlertDialog.Builder(getContext(), AlertDialog.THEME_DEVICE_DEFAULT_LIGHT) .setPositiveButton("重试", (dialog, which) -> update()) .setTitle("下载失败") .setCancelable(false) .show(); } @Override protected void warn(BaseDownloadTask task) { } }).start(); } }