From eef616d53be1adc8ba03901923502aeb7c884b35 Mon Sep 17 00:00:00 2001 From: xuexiangjys Date: Sun, 19 Jul 2020 21:42:52 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=80=E6=94=BE=E8=AE=BE=E7=BD=AE=E5=85=A8?= =?UTF-8?q?=E5=B1=80=E7=89=88=E6=9C=AC=E6=9B=B4=E6=96=B0=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 4 +-- .../custom/CustomUpdatePrompter.java | 16 +++------ .../xupdatedemo/fragment/MainFragment.java | 2 +- .../com/xuexiang/xupdate/UpdateManager.java | 34 +++++++------------ .../java/com/xuexiang/xupdate/XUpdate.java | 32 +++++++++++++---- .../java/com/xuexiang/xupdate/_XUpdate.java | 5 +++ .../proxy/impl/DefaultUpdatePrompter.java | 33 +++++++----------- 7 files changed, 62 insertions(+), 64 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 00a7a45..3f817ef 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -63,9 +63,9 @@ dependencies { testImplementation deps.junit androidTestImplementation deps.runner androidTestImplementation deps.espresso.core -// implementation project(':xupdate-lib') + implementation project(':xupdate-lib') - implementation 'com.github.xuexiangjys:XUpdate:2.0.0' +// implementation 'com.github.xuexiangjys:XUpdate:2.0.0' implementation 'com.github.xuexiangjys.XUtil:xutil-core:1.1.8' implementation 'com.github.xuexiangjys.XUtil:xutil-sub:1.1.8' diff --git a/app/src/main/java/com/xuexiang/xupdatedemo/custom/CustomUpdatePrompter.java b/app/src/main/java/com/xuexiang/xupdatedemo/custom/CustomUpdatePrompter.java index 57aac46..dfabf3b 100644 --- a/app/src/main/java/com/xuexiang/xupdatedemo/custom/CustomUpdatePrompter.java +++ b/app/src/main/java/com/xuexiang/xupdatedemo/custom/CustomUpdatePrompter.java @@ -17,8 +17,8 @@ package com.xuexiang.xupdatedemo.custom; import android.app.AlertDialog; -import android.content.Context; import android.content.DialogInterface; + import androidx.annotation.NonNull; import com.xuexiang.xupdate.entity.PromptEntity; @@ -39,12 +39,6 @@ */ public class CustomUpdatePrompter implements IUpdatePrompter { - private Context mContext; - - public CustomUpdatePrompter(Context context) { - mContext = context; - } - /** * 显示自定义提示 * @@ -52,9 +46,9 @@ public CustomUpdatePrompter(Context context) { * @param updateProxy */ private void showUpdatePrompt(final @NonNull UpdateEntity updateEntity, final @NonNull IUpdateProxy updateProxy) { - String updateInfo = UpdateUtils.getDisplayUpdateInfo(mContext, updateEntity); + String updateInfo = UpdateUtils.getDisplayUpdateInfo(updateProxy.getContext(), updateEntity); - AlertDialog.Builder builder = new AlertDialog.Builder(mContext) + AlertDialog.Builder builder = new AlertDialog.Builder(updateProxy.getContext()) .setTitle(String.format("是否升级到%s版本?", updateEntity.getVersionName())) .setMessage(updateInfo) .setPositiveButton("升级", new DialogInterface.OnClickListener() { @@ -63,7 +57,7 @@ public void onClick(DialogInterface dialog, int which) { updateProxy.startDownload(updateEntity, new OnFileDownloadListener() { @Override public void onStart() { - HProgressDialogUtils.showHorizontalProgressDialog(mContext, "下载进度", false); + HProgressDialogUtils.showHorizontalProgressDialog(updateProxy.getContext(), "下载进度", false); } @Override @@ -88,7 +82,7 @@ public void onError(Throwable throwable) { builder.setNegativeButton("暂不升级", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - UpdateUtils.saveIgnoreVersion(mContext, updateEntity.getVersionName()); + UpdateUtils.saveIgnoreVersion(updateProxy.getContext(), updateEntity.getVersionName()); } }).setCancelable(true); } else { diff --git a/app/src/main/java/com/xuexiang/xupdatedemo/fragment/MainFragment.java b/app/src/main/java/com/xuexiang/xupdatedemo/fragment/MainFragment.java index cd629b8..40ab82b 100644 --- a/app/src/main/java/com/xuexiang/xupdatedemo/fragment/MainFragment.java +++ b/app/src/main/java/com/xuexiang/xupdatedemo/fragment/MainFragment.java @@ -162,7 +162,7 @@ public void onAfterCheck() { } }) .updateParser(new CustomUpdateParser()) - .updatePrompter(new CustomUpdatePrompter(getActivity())) + .updatePrompter(new CustomUpdatePrompter()) .update(); break; case 8: diff --git a/xupdate-lib/src/main/java/com/xuexiang/xupdate/UpdateManager.java b/xupdate-lib/src/main/java/com/xuexiang/xupdate/UpdateManager.java index c084457..a347e48 100644 --- a/xupdate-lib/src/main/java/com/xuexiang/xupdate/UpdateManager.java +++ b/xupdate-lib/src/main/java/com/xuexiang/xupdate/UpdateManager.java @@ -16,7 +16,6 @@ package com.xuexiang.xupdate; -import android.app.Activity; import android.content.Context; import android.text.TextUtils; @@ -333,10 +332,10 @@ public void findNewVersion(@NonNull UpdateEntity updateEntity, @NonNull IUpdateP mIUpdateProxy.findNewVersion(updateEntity, updateProxy); } else { if (mIUpdatePrompter instanceof DefaultUpdatePrompter) { - if (mContext != null && !((Activity) mContext).isFinishing()) { - mIUpdatePrompter.showPrompt(updateEntity, updateProxy, mPromptEntity); - } else { + if (mContext != null && mContext instanceof FragmentActivity && ((FragmentActivity) mContext).isFinishing()) { _XUpdate.onUpdateError(PROMPT_ACTIVITY_DESTROY); + } else { + mIUpdatePrompter.showPrompt(updateEntity, updateProxy, mPromptEntity); } } else { mIUpdatePrompter.showPrompt(updateEntity, updateProxy, mPromptEntity); @@ -523,6 +522,7 @@ public static class Builder { updateChecker = _XUpdate.getIUpdateChecker(); updateParser = _XUpdate.getIUpdateParser(); + updatePrompter = _XUpdate.getIUpdatePrompter(); updateDownLoader = _XUpdate.getIUpdateDownLoader(); isGet = _XUpdate.isGet(); @@ -623,7 +623,7 @@ public Builder isWifiOnly(boolean isWifiOnly) { /** * 设置版本更新检查器 * - * @param updateChecker + * @param updateChecker 版本更新检查器 * @return */ public Builder updateChecker(@NonNull IUpdateChecker updateChecker) { @@ -634,7 +634,7 @@ public Builder updateChecker(@NonNull IUpdateChecker updateChecker) { /** * 设置版本更新的解析器 * - * @param updateParser + * @param updateParser 版本更新的解析器 * @return */ public Builder updateParser(@NonNull IUpdateParser updateParser) { @@ -645,7 +645,7 @@ public Builder updateParser(@NonNull IUpdateParser updateParser) { /** * 设置版本更新提示器 * - * @param updatePrompter + * @param updatePrompter 版本更新提示器 * @return */ public Builder updatePrompter(@NonNull IUpdatePrompter updatePrompter) { @@ -656,7 +656,7 @@ public Builder updatePrompter(@NonNull IUpdatePrompter updatePrompter) { /** * 设置文件的下载监听 * - * @param onFileDownloadListener + * @param onFileDownloadListener 文件下载监听 * @return */ public Builder setOnFileDownloadListener(OnFileDownloadListener onFileDownloadListener) { @@ -667,7 +667,7 @@ public Builder setOnFileDownloadListener(OnFileDownloadListener onFileDownloadLi /** * 设置主题颜色 * - * @param themeColor + * @param themeColor 主题颜色资源 * @return */ @Deprecated @@ -679,7 +679,7 @@ public Builder themeColor(@ColorInt int themeColor) { /** * 设置主题颜色 * - * @param themeColor + * @param themeColor 主题颜色资源 * @return */ public Builder promptThemeColor(@ColorInt int themeColor) { @@ -690,7 +690,7 @@ public Builder promptThemeColor(@ColorInt int themeColor) { /** * 设置顶部背景图片 * - * @param topResId + * @param topResId 顶部背景图片资源 * @return */ @Deprecated @@ -702,7 +702,7 @@ public Builder topResId(@DrawableRes int topResId) { /** * 设置顶部背景图片 * - * @param topResId + * @param topResId 顶部背景图片资源 * @return */ public Builder promptTopResId(@DrawableRes int topResId) { @@ -763,16 +763,6 @@ public UpdateManager build() { UpdateUtils.requireNonNull(this.context, "[UpdateManager.Builder] : context == null"); UpdateUtils.requireNonNull(this.updateHttpService, "[UpdateManager.Builder] : updateHttpService == null"); - if (this.updatePrompter == null) { - if (context instanceof FragmentActivity) { - updatePrompter = new DefaultUpdatePrompter(((FragmentActivity) context).getSupportFragmentManager()); - } else if (context instanceof Activity) { - updatePrompter = new DefaultUpdatePrompter(); - } else { - throw new UnsupportedOperationException("[UpdateManager.Builder] : 使用默认的版本更新提示器,context必须传Activity!"); - } - } - if (TextUtils.isEmpty(apkCacheDir)) { apkCacheDir = UpdateUtils.getDefaultDiskCacheDirPath(); } diff --git a/xupdate-lib/src/main/java/com/xuexiang/xupdate/XUpdate.java b/xupdate-lib/src/main/java/com/xuexiang/xupdate/XUpdate.java index dbdd0cf..349de70 100644 --- a/xupdate-lib/src/main/java/com/xuexiang/xupdate/XUpdate.java +++ b/xupdate-lib/src/main/java/com/xuexiang/xupdate/XUpdate.java @@ -33,10 +33,12 @@ import com.xuexiang.xupdate.proxy.IUpdateDownloader; import com.xuexiang.xupdate.proxy.IUpdateHttpService; import com.xuexiang.xupdate.proxy.IUpdateParser; +import com.xuexiang.xupdate.proxy.IUpdatePrompter; import com.xuexiang.xupdate.proxy.impl.DefaultFileEncryptor; import com.xuexiang.xupdate.proxy.impl.DefaultUpdateChecker; import com.xuexiang.xupdate.proxy.impl.DefaultUpdateDownloader; import com.xuexiang.xupdate.proxy.impl.DefaultUpdateParser; +import com.xuexiang.xupdate.proxy.impl.DefaultUpdatePrompter; import com.xuexiang.xupdate.utils.ApkInstallUtils; import java.util.Map; @@ -87,6 +89,10 @@ public class XUpdate { * 版本更新解析器【有默认】 */ IUpdateParser mIUpdateParser; + /** + * 版本更新提示器【有默认】 + */ + IUpdatePrompter mIUpdatePrompter; /** * 版本更新下载器【有默认】 */ @@ -114,6 +120,7 @@ private XUpdate() { mIUpdateChecker = new DefaultUpdateChecker(); mIUpdateParser = new DefaultUpdateParser(); mIUpdateDownloader = new DefaultUpdateDownloader(); + mIUpdatePrompter = new DefaultUpdatePrompter(); mIFileEncryptor = new DefaultFileEncryptor(); mOnInstallListener = new DefaultInstallListener(); mOnUpdateFailureListener = new DefaultUpdateFailureListener(); @@ -229,7 +236,7 @@ private void logForParams(@NonNull Map params) { /** - * 设置版本更新网络请求服务API + * 设置全局版本更新网络请求服务API * * @param updateHttpService * @return @@ -241,9 +248,9 @@ public XUpdate setIUpdateHttpService(@NonNull IUpdateHttpService updateHttpServi } /** - * 设置版本更新检查 + * 设置全局版本更新检查 * - * @param updateChecker + * @param updateChecker 版本更新检查器 * @return */ public XUpdate setIUpdateChecker(@NonNull IUpdateChecker updateChecker) { @@ -252,9 +259,9 @@ public XUpdate setIUpdateChecker(@NonNull IUpdateChecker updateChecker) { } /** - * 设置版本更新的解析器 + * 设置全局版本更新的解析器 * - * @param updateParser + * @param updateParser 版本更新的解析器 * @return */ public XUpdate setIUpdateParser(@NonNull IUpdateParser updateParser) { @@ -263,9 +270,20 @@ public XUpdate setIUpdateParser(@NonNull IUpdateParser updateParser) { } /** - * 设置版本更新下载器 + * 设置全局版本更新提示器 + * + * @param updatePrompter 版本更新提示器 + * @return + */ + public XUpdate setIUpdatePrompter(IUpdatePrompter updatePrompter) { + mIUpdatePrompter = updatePrompter; + return this; + } + + /** + * 设置全局版本更新下载器 * - * @param updateDownLoader + * @param updateDownLoader 版本更新下载器 * @return */ public XUpdate setIUpdateDownLoader(@NonNull IUpdateDownloader updateDownLoader) { diff --git a/xupdate-lib/src/main/java/com/xuexiang/xupdate/_XUpdate.java b/xupdate-lib/src/main/java/com/xuexiang/xupdate/_XUpdate.java index 490d712..064902a 100644 --- a/xupdate-lib/src/main/java/com/xuexiang/xupdate/_XUpdate.java +++ b/xupdate-lib/src/main/java/com/xuexiang/xupdate/_XUpdate.java @@ -30,6 +30,7 @@ import com.xuexiang.xupdate.proxy.IUpdateDownloader; import com.xuexiang.xupdate.proxy.IUpdateHttpService; import com.xuexiang.xupdate.proxy.IUpdateParser; +import com.xuexiang.xupdate.proxy.IUpdatePrompter; import com.xuexiang.xupdate.proxy.impl.DefaultFileEncryptor; import com.xuexiang.xupdate.utils.ApkInstallUtils; @@ -77,6 +78,10 @@ public static IUpdateParser getIUpdateParser() { return XUpdate.get().mIUpdateParser; } + public static IUpdatePrompter getIUpdatePrompter() { + return XUpdate.get().mIUpdatePrompter; + } + public static IUpdateDownloader getIUpdateDownLoader() { return XUpdate.get().mIUpdateDownloader; } diff --git a/xupdate-lib/src/main/java/com/xuexiang/xupdate/proxy/impl/DefaultUpdatePrompter.java b/xupdate-lib/src/main/java/com/xuexiang/xupdate/proxy/impl/DefaultUpdatePrompter.java index fc02cfc..c9e4207 100644 --- a/xupdate-lib/src/main/java/com/xuexiang/xupdate/proxy/impl/DefaultUpdatePrompter.java +++ b/xupdate-lib/src/main/java/com/xuexiang/xupdate/proxy/impl/DefaultUpdatePrompter.java @@ -16,11 +16,14 @@ package com.xuexiang.xupdate.proxy.impl; +import android.content.Context; + import androidx.annotation.NonNull; -import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentActivity; import com.xuexiang.xupdate.entity.PromptEntity; import com.xuexiang.xupdate.entity.UpdateEntity; +import com.xuexiang.xupdate.logs.UpdateLog; import com.xuexiang.xupdate.proxy.IUpdatePrompter; import com.xuexiang.xupdate.proxy.IUpdateProxy; import com.xuexiang.xupdate.widget.UpdateDialogActivity; @@ -34,23 +37,6 @@ */ public class DefaultUpdatePrompter implements IUpdatePrompter { - private FragmentManager mFragmentManager; - - /** - * 使用默认Dialog - */ - public DefaultUpdatePrompter() { - } - - /** - * 使用FragmentDialog - * - * @param manager - */ - public DefaultUpdatePrompter(@NonNull FragmentManager manager) { - mFragmentManager = manager; - } - /** * 显示版本更新提示 * @@ -60,10 +46,15 @@ public DefaultUpdatePrompter(@NonNull FragmentManager manager) { */ @Override public void showPrompt(@NonNull UpdateEntity updateEntity, @NonNull IUpdateProxy updateProxy, @NonNull PromptEntity promptEntity) { - if (mFragmentManager != null) { - UpdateDialogFragment.show(mFragmentManager, updateEntity, new DefaultPrompterProxyImpl(updateProxy), promptEntity); + Context context = updateProxy.getContext(); + if (context == null) { + UpdateLog.e("showPrompt failed, context is null!"); + return; + } + if (context instanceof FragmentActivity) { + UpdateDialogFragment.show(((FragmentActivity) context).getSupportFragmentManager(), updateEntity, new DefaultPrompterProxyImpl(updateProxy), promptEntity); } else { - UpdateDialogActivity.show(updateProxy.getContext(), updateEntity, new DefaultPrompterProxyImpl(updateProxy), promptEntity); + UpdateDialogActivity.show(context, updateEntity, new DefaultPrompterProxyImpl(updateProxy), promptEntity); } } }