From d4929b8d86dda38c3b1b7909a794f356933ae516 Mon Sep 17 00:00:00 2001 From: Mike Hardy Date: Fri, 22 Nov 2024 13:05:47 -0500 Subject: [PATCH 1/2] fix: ignore shared deck download if lifecycle teardown has begun --- .../main/java/com/ichi2/anki/SharedDecksActivity.kt | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/SharedDecksActivity.kt b/AnkiDroid/src/main/java/com/ichi2/anki/SharedDecksActivity.kt index 772e0d4888bc..9928363c8296 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/SharedDecksActivity.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/SharedDecksActivity.kt @@ -211,11 +211,14 @@ class SharedDecksActivity : AnkiActivity() { webView.loadUrl(resources.getString(R.string.shared_decks_url)) webView.webViewClient = WebViewClient() webView.setDownloadListener { url, userAgent, contentDisposition, mimetype, _ -> - val sharedDecksDownloadFragment = SharedDecksDownloadFragment() - sharedDecksDownloadFragment.arguments = bundleOf(DOWNLOAD_FILE to DownloadFile(url, userAgent, contentDisposition, mimetype)) - - supportFragmentManager.commit { - add(R.id.shared_decks_fragment_container, sharedDecksDownloadFragment, SHARED_DECKS_DOWNLOAD_FRAGMENT).addToBackStack(null) + // If the activity/fragment lifecycle has already begun teardown process, + // avoid handling the download, as FragmentManager.commit will throw + if (!supportFragmentManager.isStateSaved) { + val sharedDecksDownloadFragment = SharedDecksDownloadFragment() + sharedDecksDownloadFragment.arguments = bundleOf(DOWNLOAD_FILE to DownloadFile(url, userAgent, contentDisposition, mimetype)) + supportFragmentManager.commit { + add(R.id.shared_decks_fragment_container, sharedDecksDownloadFragment, SHARED_DECKS_DOWNLOAD_FRAGMENT).addToBackStack(null) + } } } From 95135f6a6888488ac38ef73b7b90585ecc7218bd Mon Sep 17 00:00:00 2001 From: Mike Hardy Date: Fri, 22 Nov 2024 13:34:21 -0500 Subject: [PATCH 2/2] fix: avoid back stack manipulation dismissing dialogs after state saved --- .../src/main/java/com/ichi2/anki/AnkiActivity.kt | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/AnkiActivity.kt b/AnkiDroid/src/main/java/com/ichi2/anki/AnkiActivity.kt index 01f73a3f8f32..41163bf34d56 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/AnkiActivity.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/AnkiActivity.kt @@ -580,10 +580,13 @@ open class AnkiActivity : AppCompatActivity, SimpleMessageDialogListener, Shortc // Dismiss whatever dialog is showing fun dismissAllDialogFragments() { - supportFragmentManager.popBackStack( - DIALOG_FRAGMENT_TAG, - FragmentManager.POP_BACK_STACK_INCLUSIVE - ) + // trying to pop fragment manager back state crashes if state already saved + if (!supportFragmentManager.isStateSaved) { + supportFragmentManager.popBackStack( + DIALOG_FRAGMENT_TAG, + FragmentManager.POP_BACK_STACK_INCLUSIVE + ) + } } /**