package com.stardust.scriptdroid.ui.update; import android.app.Activity; import android.content.DialogInterface; import android.support.annotation.NonNull; import com.afollestad.materialdialogs.DialogAction; import com.afollestad.materialdialogs.MaterialDialog; import com.stardust.scriptdroid.BuildConfig; import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.tool.UpdateChecker; import com.stardust.scriptdroid.tool.VersionInfo; /** * Created by Stardust on 2017/4/12. */ public class VersionGuard { private Activity mActivity; private MaterialDialog mDeprecatedDialog; private VersionInfo mVersionInfo = VersionInfo.getInstance(); public VersionGuard(Activity activity) { mActivity = activity; } public void checkDeprecateAndUpdate() { mVersionInfo.readDeprecatedFromPrefIfNeeded(mActivity); if (mVersionInfo.isCurrentVersionDeprecated()) { showDeprecatedDialogIfNeeded(); } else { checkUpdateIfNeeded(); } } private void checkUpdateIfNeeded() { if (mVersionInfo.getUpdateInfo() == null) { mVersionInfo.setOnReceiveUpdateResultCallback(new VersionInfo.OnReceiveUpdateResultCallback() { @Override public void onReceive(UpdateChecker.UpdateInfo info, boolean isCurrentVersionDeprecated) { mVersionInfo.setOnReceiveUpdateResultCallback(null); if (isCurrentVersionDeprecated) { showDeprecatedDialogIfNeeded(); } else { showUpdateInfoIfNeeded(info); } } }); mVersionInfo.checkUpdateIfNeeded(mActivity); } } private void showUpdateInfoIfNeeded(UpdateChecker.UpdateInfo info) { if (BuildConfig.VERSION_CODE < info.versionCode) { new UpdateInfoDialogBuilder(mActivity, info) .showDoNotAskAgain() .show(); } } private void showDeprecatedDialogIfNeeded() { if (mDeprecatedDialog != null && mDeprecatedDialog.isShowing()) return; String content = mActivity.getString(R.string.warning_version_too_old); String issues = mVersionInfo.getCurrentVersionIssues(); if (issues != null) { content += "\n" + issues; } mDeprecatedDialog = new MaterialDialog.Builder(mActivity) .title(R.string.text_version_too_old) .content(content) .positiveText(R.string.text_update) .negativeText(R.string.text_exit) .cancelable(false) .autoDismiss(false) .onAny(new MaterialDialog.SingleButtonCallback() { @Override public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { if (which == DialogAction.POSITIVE) { new UpdateCheckDialog(mActivity) .show(); } else { mActivity.finish(); } } }) .dismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { mDeprecatedDialog = null; } }) .show(); } }