From 40b8222308121db390cef9e1f9b0cc20aeefa306 Mon Sep 17 00:00:00 2001 From: MohitMaliFtechiz Date: Tue, 2 Sep 2025 20:38:57 +0530 Subject: [PATCH] Improved the retrieving of `savedStateHandle`. --- .../nav/destination/reader/KiwixReaderFragment.kt | 12 +++++++----- .../core/extensions/ActivityExtensions.kt | 2 +- .../kiwixmobile/custom/main/CustomReaderFragment.kt | 6 +++--- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/reader/KiwixReaderFragment.kt b/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/reader/KiwixReaderFragment.kt index 26ec6d020..c27b3ac07 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/reader/KiwixReaderFragment.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/reader/KiwixReaderFragment.kt @@ -36,6 +36,7 @@ import org.kiwix.kiwixmobile.core.base.FragmentActivityExtensions.Super import org.kiwix.kiwixmobile.core.base.FragmentActivityExtensions.Super.ShouldCall import org.kiwix.kiwixmobile.core.downloader.downloadManager.ZERO import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.consumeObservable +import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.getObservableNavigationResult import org.kiwix.kiwixmobile.core.extensions.isFileExist import org.kiwix.kiwixmobile.core.extensions.snack import org.kiwix.kiwixmobile.core.extensions.toast @@ -89,11 +90,9 @@ class KiwixReaderFragment : CoreReaderFragment() { private fun openPageInBookFromNavigationArguments() { showProgressBarWithProgress(30) val kiwixMainActivity = activity as? KiwixMainActivity - val savedStateHandle = kiwixMainActivity?.navController?.currentBackStackEntry?.savedStateHandle - - val zimFileUri = savedStateHandle?.get(ZIM_FILE_URI_KEY).orEmpty() - val pageUrl = savedStateHandle?.get(PAGE_URL_KEY).orEmpty() - val searchItemTitle = savedStateHandle?.get(SEARCH_ITEM_TITLE_KEY).orEmpty() + val zimFileUri = getNavigationResult(ZIM_FILE_URI_KEY, kiwixMainActivity) + val pageUrl = getNavigationResult(PAGE_URL_KEY, kiwixMainActivity) + val searchItemTitle = getNavigationResult(SEARCH_ITEM_TITLE_KEY, kiwixMainActivity) coreReaderLifeCycleScope?.launch { if (pageUrl.isNotEmpty()) { if (zimFileUri.isNotEmpty()) { @@ -125,6 +124,9 @@ class KiwixReaderFragment : CoreReaderFragment() { } } + private fun getNavigationResult(key: String, kiwixMainActivity: KiwixMainActivity?) = + kiwixMainActivity?.getObservableNavigationResult(key)?.value.orEmpty() + private suspend fun tryOpeningZimFile(zimFileUri: String) { // Stop any ongoing WebView loading and clear the WebView list // before setting a new ZIM file to the reader. This helps prevent native crashes. diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/extensions/ActivityExtensions.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/extensions/ActivityExtensions.kt index d2426d913..4fb49a299 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/extensions/ActivityExtensions.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/extensions/ActivityExtensions.kt @@ -101,7 +101,7 @@ object ActivityExtensions { coreMainActivity.navController.popBackStack() } - private fun Activity.getObservableNavigationResult(key: String = "result") = + fun Activity.getObservableNavigationResult(key: String = "result") = if (coreMainActivity.isNavControllerInitialized) { coreMainActivity.navController.currentBackStackEntry?.savedStateHandle ?.getLiveData(key) diff --git a/custom/src/main/java/org/kiwix/kiwixmobile/custom/main/CustomReaderFragment.kt b/custom/src/main/java/org/kiwix/kiwixmobile/custom/main/CustomReaderFragment.kt index dd825b493..87433e13f 100644 --- a/custom/src/main/java/org/kiwix/kiwixmobile/custom/main/CustomReaderFragment.kt +++ b/custom/src/main/java/org/kiwix/kiwixmobile/custom/main/CustomReaderFragment.kt @@ -33,6 +33,7 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.kiwix.kiwixmobile.core.base.BaseActivity import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.consumeObservable +import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.getObservableNavigationResult import org.kiwix.kiwixmobile.core.extensions.browserIntent import org.kiwix.kiwixmobile.core.extensions.isFileExist import org.kiwix.kiwixmobile.core.extensions.update @@ -176,9 +177,8 @@ class CustomReaderFragment : CoreReaderFragment() { private fun loadPageFromNavigationArguments() { val customMainActivity = activity as? CustomMainActivity - val savedStateHandle = - customMainActivity?.navController?.currentBackStackEntry?.savedStateHandle - val pageUrl = savedStateHandle?.get(PAGE_URL_KEY).orEmpty() + val pageUrl = + customMainActivity?.getObservableNavigationResult(PAGE_URL_KEY)?.value.orEmpty() if (pageUrl.isNotEmpty()) { loadUrlWithCurrentWebview(pageUrl) // Setup bookmark for current book