UpdateUtils.java 3.68 KB
package com.polysoft.nafmii.utils;

import android.text.TextUtils;

import androidx.fragment.app.FragmentManager;

import com.polysoft.nafmii.bean.UpdateVersion;
import com.polysoft.nafmii.constants.ServerApi;
import com.polysoft.nafmii.enums.StateEnum;
import com.polysoft.nafmii.fragment.dialog.UpdateDialog;
import com.polysoft.nafmii.net.OkhttpApi;
import com.polysoft.nafmii.net.RequestBack;
import com.whaty.nafmii.BuildConfig;

import java.io.File;

public class UpdateUtils {

    public static void checkVersion(FragmentManager manager, String h5Version) {
        ServerApi.postAppVersion(new RequestBack<UpdateVersion>() {
            @Override
            protected void onResponse(StateEnum state, UpdateVersion data, String message) {
                // 非强制更新是,需要同时进行h5版本更新
                if (state != StateEnum.OK || null == data || !isMustUpdate(data) || !isUpdateApp(data)) {
                    if (!TextUtils.isEmpty(h5Version)) {
                        checkH5Version(h5Version);
                    }
                    return;
                }
                ExecutorUtils.main(() -> UpdateDialog.show(manager, data));
            }
        });
    }

    public static String checkVersion(FragmentManager manager, UpdateVersion update) {
        if (null != update) {
            String upgradeType = update.getUpgradeType();
            if ("1".equals(upgradeType)) { // h5
                downH5Version(update);
                return "";
            } else if ("2".equals(upgradeType) && isUpdateApp(update)) {
                ExecutorUtils.main(() -> UpdateDialog.show(manager, update));
                return "";
            }
        }
        return "参数错误";
    }


    public static void checkH5Version(String h5Version) {
        if (BuildConfig.ONLINE || TextUtils.isEmpty(h5Version)) { // 线上版本不需要进行热更新
            return;
        }
        ServerApi.postH5Version(h5Version, new RequestBack<UpdateVersion>() {
            @Override
            protected void onResponse(StateEnum state, UpdateVersion data, String message) {
                if (state != StateEnum.OK || null == data || h5Version.equals(data.getvNumber())) {
                    return;
                }
                downH5Version(data);
            }
        });
    }

    static void downH5Version(UpdateVersion update) {
        String url = update.getLocation();
        if (TextUtils.isEmpty(url) || WebVersionUtils.getVersion().equals(update.getvNumber())) {
            return;
        }
        if (!url.startsWith("http")) {
            url = BuildConfig.IMG_API + url;
        }
        File file = WebVersionUtils.getDistZip(update.getvNumber());
        OkhttpApi.doDownload(url, file, new OkhttpApi.IDownListener() {
            @Override
            public void onProgress(int progress) {
                if (progress == 100) {
                    try {
                        File oldDistDir = WebVersionUtils.getDistDir();
                        ZipUtils.unZip(file, file.getParentFile());
                        WebVersionUtils.setVersion(update.getvNumber());
                        FileUtils.deletes(oldDistDir.getParentFile());
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    return;
                }
            }

            @Override
            public void onFail() {
            }
        });
    }


    private static boolean isUpdateApp(UpdateVersion update) {
        return !CtxUtils.getPackageInfo().versionName.equals(update.getvNumber());
    }

    private static boolean isMustUpdate(UpdateVersion update) {
        return "0".equals(update.getIsForce());
    }

}