Skip to content

Commit

Permalink
开放设置全局版本更新提示器
Browse files Browse the repository at this point in the history
  • Loading branch information
xuexiangjys committed Jul 19, 2020
1 parent 15e1852 commit eef616d
Show file tree
Hide file tree
Showing 7 changed files with 62 additions and 64 deletions.
4 changes: 2 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -39,22 +39,16 @@
*/
public class CustomUpdatePrompter implements IUpdatePrompter {

private Context mContext;

public CustomUpdatePrompter(Context context) {
mContext = context;
}

/**
* 显示自定义提示
*
* @param updateEntity
* @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() {
Expand All @@ -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
Expand All @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ public void onAfterCheck() {
}
})
.updateParser(new CustomUpdateParser())
.updatePrompter(new CustomUpdatePrompter(getActivity()))
.updatePrompter(new CustomUpdatePrompter())
.update();
break;
case 8:
Expand Down
34 changes: 12 additions & 22 deletions xupdate-lib/src/main/java/com/xuexiang/xupdate/UpdateManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@

package com.xuexiang.xupdate;

import android.app.Activity;
import android.content.Context;
import android.text.TextUtils;

Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -523,6 +522,7 @@ public static class Builder {

updateChecker = _XUpdate.getIUpdateChecker();
updateParser = _XUpdate.getIUpdateParser();
updatePrompter = _XUpdate.getIUpdatePrompter();
updateDownLoader = _XUpdate.getIUpdateDownLoader();

isGet = _XUpdate.isGet();
Expand Down Expand Up @@ -623,7 +623,7 @@ public Builder isWifiOnly(boolean isWifiOnly) {
/**
* 设置版本更新检查器
*
* @param updateChecker
* @param updateChecker 版本更新检查器
* @return
*/
public Builder updateChecker(@NonNull IUpdateChecker updateChecker) {
Expand All @@ -634,7 +634,7 @@ public Builder updateChecker(@NonNull IUpdateChecker updateChecker) {
/**
* 设置版本更新的解析器
*
* @param updateParser
* @param updateParser 版本更新的解析器
* @return
*/
public Builder updateParser(@NonNull IUpdateParser updateParser) {
Expand All @@ -645,7 +645,7 @@ public Builder updateParser(@NonNull IUpdateParser updateParser) {
/**
* 设置版本更新提示器
*
* @param updatePrompter
* @param updatePrompter 版本更新提示器
* @return
*/
public Builder updatePrompter(@NonNull IUpdatePrompter updatePrompter) {
Expand All @@ -656,7 +656,7 @@ public Builder updatePrompter(@NonNull IUpdatePrompter updatePrompter) {
/**
* 设置文件的下载监听
*
* @param onFileDownloadListener
* @param onFileDownloadListener 文件下载监听
* @return
*/
public Builder setOnFileDownloadListener(OnFileDownloadListener onFileDownloadListener) {
Expand All @@ -667,7 +667,7 @@ public Builder setOnFileDownloadListener(OnFileDownloadListener onFileDownloadLi
/**
* 设置主题颜色
*
* @param themeColor
* @param themeColor 主题颜色资源
* @return
*/
@Deprecated
Expand All @@ -679,7 +679,7 @@ public Builder themeColor(@ColorInt int themeColor) {
/**
* 设置主题颜色
*
* @param themeColor
* @param themeColor 主题颜色资源
* @return
*/
public Builder promptThemeColor(@ColorInt int themeColor) {
Expand All @@ -690,7 +690,7 @@ public Builder promptThemeColor(@ColorInt int themeColor) {
/**
* 设置顶部背景图片
*
* @param topResId
* @param topResId 顶部背景图片资源
* @return
*/
@Deprecated
Expand All @@ -702,7 +702,7 @@ public Builder topResId(@DrawableRes int topResId) {
/**
* 设置顶部背景图片
*
* @param topResId
* @param topResId 顶部背景图片资源
* @return
*/
public Builder promptTopResId(@DrawableRes int topResId) {
Expand Down Expand Up @@ -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();
}
Expand Down
32 changes: 25 additions & 7 deletions xupdate-lib/src/main/java/com/xuexiang/xupdate/XUpdate.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -87,6 +89,10 @@ public class XUpdate {
* 版本更新解析器【有默认】
*/
IUpdateParser mIUpdateParser;
/**
* 版本更新提示器【有默认】
*/
IUpdatePrompter mIUpdatePrompter;
/**
* 版本更新下载器【有默认】
*/
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -229,7 +236,7 @@ private void logForParams(@NonNull Map<String, Object> params) {


/**
* 设置版本更新网络请求服务API
* 设置全局版本更新网络请求服务API
*
* @param updateHttpService
* @return
Expand All @@ -241,9 +248,9 @@ public XUpdate setIUpdateHttpService(@NonNull IUpdateHttpService updateHttpServi
}

/**
* 设置版本更新检查
* 设置全局版本更新检查
*
* @param updateChecker
* @param updateChecker 版本更新检查器
* @return
*/
public XUpdate setIUpdateChecker(@NonNull IUpdateChecker updateChecker) {
Expand All @@ -252,9 +259,9 @@ public XUpdate setIUpdateChecker(@NonNull IUpdateChecker updateChecker) {
}

/**
* 设置版本更新的解析器
* 设置全局版本更新的解析器
*
* @param updateParser
* @param updateParser 版本更新的解析器
* @return
*/
public XUpdate setIUpdateParser(@NonNull IUpdateParser updateParser) {
Expand All @@ -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) {
Expand Down
5 changes: 5 additions & 0 deletions xupdate-lib/src/main/java/com/xuexiang/xupdate/_XUpdate.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
}

/**
* 显示版本更新提示
*
Expand All @@ -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);
}
}
}

0 comments on commit eef616d

Please sign in to comment.