diff --git a/README.md b/README.md index 153ddad..605845e 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ ``` dependencies { - implementation 'com.github.ZuoHailong:AppUpdate:0.2.6' + implementation 'com.github.DrumbeatSoft:AppUpdate:0.2.7' } ``` diff --git a/appupdate/build.gradle b/appupdate/build.gradle index d3198ac..5d58ef4 100644 --- a/appupdate/build.gradle +++ b/appupdate/build.gradle @@ -8,8 +8,8 @@ android { defaultConfig { minSdkVersion 19 targetSdkVersion 28 - versionCode 26 - versionName "0.2.6" + versionCode 28 + versionName "0.2.8" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/appupdate/src/main/java/com/hailong/appupdate/AppUpdateManager.java b/appupdate/src/main/java/com/hailong/appupdate/AppUpdateManager.java index 3227261..6ed1689 100644 --- a/appupdate/src/main/java/com/hailong/appupdate/AppUpdateManager.java +++ b/appupdate/src/main/java/com/hailong/appupdate/AppUpdateManager.java @@ -31,7 +31,7 @@ private AppUpdateManager(Builder builder) { .setCancelText(builder.cancleText) // .setApkContentLength(builder.apkContentLength) // .isBreakpoint(builder.breakpoint) - .show(builder.context.getFragmentManager(), "update"); + .showAllowingStateLoss(builder.context.getFragmentManager(), "update"); } /** diff --git a/appupdate/src/main/java/com/hailong/appupdate/widget/UpdateDialog.java b/appupdate/src/main/java/com/hailong/appupdate/widget/UpdateDialog.java index 781dc3e..d1c386d 100644 --- a/appupdate/src/main/java/com/hailong/appupdate/widget/UpdateDialog.java +++ b/appupdate/src/main/java/com/hailong/appupdate/widget/UpdateDialog.java @@ -3,6 +3,8 @@ import android.Manifest; import android.app.AlertDialog; import android.app.DialogFragment; +import android.app.FragmentManager; +import android.app.FragmentTransaction; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; @@ -41,6 +43,7 @@ import com.yanzhenjie.kalle.Kalle; import com.yanzhenjie.kalle.download.Callback; +import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; @@ -376,4 +379,29 @@ public boolean handleMessage(Message msg) { } }); + public void showAllowingStateLoss(FragmentManager manager, String tag) { + try { + Field dismissed = DialogFragment.class.getDeclaredField("mDismissed"); + dismissed.setAccessible(true); + dismissed.set(this, false); + } catch (NoSuchFieldException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + try { + Field shown = DialogFragment.class.getDeclaredField("mShownByMe"); + shown.setAccessible(true); + shown.set(this, true); + } catch (NoSuchFieldException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + FragmentTransaction ft = manager.beginTransaction(); + if (!this.isAdded()) { + ft.add(this, tag); + } + ft.commitAllowingStateLoss(); + } }