From 1e584a368dc8aae1a7882aecfc9e55fe5f572133 Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Wed, 21 Feb 2024 18:20:28 +0100 Subject: [PATCH] Fix race condition with progress dialog --- .../keychain/service/ProgressDialogManager.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/ProgressDialogManager.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/ProgressDialogManager.java index 1fb4d52e7..b6034d4db 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/ProgressDialogManager.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/ProgressDialogManager.java @@ -31,6 +31,7 @@ public class ProgressDialogManager { public static final String TAG_PROGRESS_DIALOG = "progressDialog"; private FragmentActivity activity; + private boolean isDismissed = false; public ProgressDialogManager(FragmentActivity activity) { this.activity = activity; @@ -42,7 +43,9 @@ public class ProgressDialogManager { public void showProgressDialog( String progressDialogMessage, int progressDialogStyle, CancellationSignal cancellationSignal) { - + if (isDismissed) { + return; + } final ProgressDialogFragment frag = ProgressDialogFragment.newInstance( progressDialogMessage, progressDialogStyle, cancellationSignal != null); @@ -52,7 +55,12 @@ public class ProgressDialogManager { // http://stackoverflow.com/questions/10114324/show-dialogfragment-from-onactivityresult final FragmentManager manager = activity.getSupportFragmentManager(); Handler handler = new Handler(); - handler.post(() -> frag.show(manager, TAG_PROGRESS_DIALOG)); + handler.post(() -> { + if (isDismissed) { + return; + } + frag.show(manager, TAG_PROGRESS_DIALOG); + }); } @@ -69,6 +77,8 @@ public class ProgressDialogManager { } public void dismissAllowingStateLoss() { + isDismissed = true; + ProgressDialogFragment progressDialogFragment = (ProgressDialogFragment) activity.getSupportFragmentManager() .findFragmentByTag(TAG_PROGRESS_DIALOG);