From 629a7f18dca63300bcabd5c571a6f1e73577af42 Mon Sep 17 00:00:00 2001 From: MohitMaliFtechiz Date: Mon, 18 Aug 2025 16:06:57 +0530 Subject: [PATCH] Fixed: Opening bookmarks, notes, and history in the reader screen does not work. * The issue occurred because the reader screen route was not being created properly, as both modules had different destination classes. We made the openPage method abstract so that each module can provide its own destination with arguments to correctly open pages. * Improved WebView creation in Compose. --- .../kiwixmobile/main/KiwixMainActivity.kt | 27 ++++++++++++++++++- .../kiwixmobile/core/main/CoreMainActivity.kt | 20 ++------------ .../core/main/reader/CoreReaderFragment.kt | 15 +++++++++-- .../custom/main/CustomMainActivity.kt | 25 +++++++++++++++++ 4 files changed, 66 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/org/kiwix/kiwixmobile/main/KiwixMainActivity.kt b/app/src/main/java/org/kiwix/kiwixmobile/main/KiwixMainActivity.kt index ee670a72c..e054c92ac 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/main/KiwixMainActivity.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/main/KiwixMainActivity.kt @@ -46,8 +46,8 @@ import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import androidx.navigation.NavController -import androidx.navigation.NavOptions import androidx.navigation.NavGraph.Companion.findStartDestination +import androidx.navigation.NavOptions import androidx.navigation.compose.rememberNavController import eu.mhutti1.utils.storage.StorageDevice import eu.mhutti1.utils.storage.StorageDeviceUtils @@ -76,6 +76,7 @@ import org.kiwix.kiwixmobile.core.main.LEFT_DRAWER_SUPPORT_ITEM_TESTING_TAG import org.kiwix.kiwixmobile.core.main.LEFT_DRAWER_ZIM_HOST_ITEM_TESTING_TAG import org.kiwix.kiwixmobile.core.main.NEW_TAB_SHORTCUT_ID import org.kiwix.kiwixmobile.core.main.ZIM_HOST_DEEP_LINK_SCHEME +import org.kiwix.kiwixmobile.core.reader.ZimReaderSource import org.kiwix.kiwixmobile.core.utils.LanguageUtils.Companion.handleLocaleChange import org.kiwix.kiwixmobile.core.utils.dialog.DialogHost import org.kiwix.kiwixmobile.kiwixActivityComponent @@ -381,6 +382,30 @@ class KiwixMainActivity : CoreMainActivity() { ) } + override fun openPage( + pageUrl: String, + zimReaderSource: ZimReaderSource?, + shouldOpenInNewTab: Boolean + ) { + var zimFileUri = "" + if (zimReaderSource != null) { + zimFileUri = zimReaderSource.toDatabase() + } + val navOptions = NavOptions.Builder() + .setLaunchSingleTop(true) + .setPopUpTo(readerFragmentRoute, inclusive = true) + .build() + val readerRoute = KiwixDestination.Reader.createRoute( + zimFileUri = zimFileUri, + pageUrl = pageUrl, + shouldOpenInNewTab = shouldOpenInNewTab + ) + navigate( + readerRoute, + navOptions + ) + } + override fun hideBottomAppBar() { shouldShowBottomAppBar.update { false } } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreMainActivity.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreMainActivity.kt index b22bd6307..8012ac6c1 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreMainActivity.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreMainActivity.kt @@ -384,27 +384,11 @@ abstract class CoreMainActivity : BaseActivity(), WebViewProvider { isVoice: Boolean = false ) - fun openPage( + abstract fun openPage( pageUrl: String, zimReaderSource: ZimReaderSource? = null, shouldOpenInNewTab: Boolean = false - ) { - var zimFileUri = "" - if (zimReaderSource != null) { - zimFileUri = zimReaderSource.toDatabase() - } - val navOptions = NavOptions.Builder() - .setLaunchSingleTop(true) - .setPopUpTo(readerFragmentRoute, inclusive = true) - .build() - val readerRouteWithArguments = - "$readerFragmentRoute?$PAGE_URL_KEY=$pageUrl&$ZIM_FILE_URI_KEY=$zimFileUri" + - "&$SHOULD_OPEN_IN_NEW_TAB=$shouldOpenInNewTab" - navigate( - readerRouteWithArguments, - navOptions - ) - } + ) private fun openBookmarks() { handleDrawerOnNavigation() diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/main/reader/CoreReaderFragment.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/main/reader/CoreReaderFragment.kt index 1fc8f36e8..769fdf95c 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/main/reader/CoreReaderFragment.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/main/reader/CoreReaderFragment.kt @@ -279,7 +279,6 @@ abstract class CoreReaderFragment : onOpenLibraryButtonClicked = {}, pageLoadingItem = false to ZERO, shouldShowDonationPopup = false, - // TODO set in onViewCreated. fullScreenItem = false to null, showBackToTopButton = false, backToTopButtonClick = { backToTop() }, @@ -441,11 +440,11 @@ abstract class CoreReaderFragment : } } LaunchedEffect(Unit) { + addFullScreenItemIfNotAttached() readerScreenState.update { copy( readerScreenTitle = context.getString(string.reader), darkModeViewPainter = darkModeViewPainter, - fullScreenItem = fullScreenItem.first to getVideoView(), tocButtonItem = getTocButtonStateAndAction(), appName = (requireActivity() as CoreMainActivity).appName, donateButtonClick = { @@ -1172,8 +1171,20 @@ abstract class CoreReaderFragment : return null } + /** + * Attached the full-screen item for videos in readerState if not already attached. + */ + private fun addFullScreenItemIfNotAttached() { + if (readerScreenState.value.fullScreenItem.second == null) { + readerScreenState.update { + copy(fullScreenItem = fullScreenItem.first to getVideoView()) + } + } + } + @Throws(IllegalArgumentException::class) protected open fun createWebView(attrs: AttributeSet?): KiwixWebView? { + addFullScreenItemIfNotAttached() return KiwixWebView( requireContext(), this, diff --git a/custom/src/main/java/org/kiwix/kiwixmobile/custom/main/CustomMainActivity.kt b/custom/src/main/java/org/kiwix/kiwixmobile/custom/main/CustomMainActivity.kt index 829d0a912..a766c7198 100644 --- a/custom/src/main/java/org/kiwix/kiwixmobile/custom/main/CustomMainActivity.kt +++ b/custom/src/main/java/org/kiwix/kiwixmobile/custom/main/CustomMainActivity.kt @@ -41,6 +41,7 @@ import org.kiwix.kiwixmobile.core.main.DrawerMenuItem import org.kiwix.kiwixmobile.core.main.LEFT_DRAWER_ABOUT_APP_ITEM_TESTING_TAG import org.kiwix.kiwixmobile.core.main.LEFT_DRAWER_SUPPORT_ITEM_TESTING_TAG import org.kiwix.kiwixmobile.core.main.NEW_TAB_SHORTCUT_ID +import org.kiwix.kiwixmobile.core.reader.ZimReaderSource import org.kiwix.kiwixmobile.core.utils.dialog.DialogHost import org.kiwix.kiwixmobile.custom.BuildConfig import org.kiwix.kiwixmobile.custom.R @@ -188,6 +189,30 @@ class CustomMainActivity : CoreMainActivity() { ) } + override fun openPage( + pageUrl: String, + zimReaderSource: ZimReaderSource?, + shouldOpenInNewTab: Boolean + ) { + var zimFileUri = "" + if (zimReaderSource != null) { + zimFileUri = zimReaderSource.toDatabase() + } + val navOptions = NavOptions.Builder() + .setLaunchSingleTop(true) + .setPopUpTo(readerFragmentRoute, inclusive = true) + .build() + val readerRoute = CustomDestination.Reader.createRoute( + zimFileUri = zimFileUri, + pageUrl = pageUrl, + shouldOpenInNewTab = shouldOpenInNewTab + ) + navigate( + readerRoute, + navOptions + ) + } + override fun hideBottomAppBar() { // Do nothing since custom apps does not have the bottomAppBar. }