mirror of
https://github.com/kiwix/kiwix-android.git
synced 2025-09-23 04:33:54 -04:00
Merge pull request #4378 from kiwix/Fixes#4377
Fixed: `FIND_IN_PAGE` not working after switching to another ZIM file.
This commit is contained in:
commit
b3090a175d
@ -46,6 +46,7 @@ import androidx.lifecycle.compose.LocalLifecycleOwner
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.lifecycle.repeatOnLifecycle
|
||||
import androidx.navigation.NavController
|
||||
import androidx.navigation.NavOptions
|
||||
import androidx.navigation.compose.rememberNavController
|
||||
import eu.mhutti1.utils.storage.StorageDevice
|
||||
import eu.mhutti1.utils.storage.StorageDeviceUtils
|
||||
@ -368,7 +369,8 @@ class KiwixMainActivity : CoreMainActivity() {
|
||||
searchString = searchString,
|
||||
isOpenedFromTabView = isOpenedFromTabView,
|
||||
isVoice = isVoice
|
||||
)
|
||||
),
|
||||
NavOptions.Builder().setPopUpTo(searchFragmentRoute, inclusive = true).build()
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -20,14 +20,25 @@ package org.kiwix.kiwixmobile.core.search.viewmodel.effects
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import org.kiwix.kiwixmobile.core.base.SideEffect
|
||||
import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.popNavigationBackstack
|
||||
import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.setNavigationResult
|
||||
import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.setNavigationResultOnCurrent
|
||||
import org.kiwix.kiwixmobile.core.main.CoreMainActivity
|
||||
import org.kiwix.kiwixmobile.core.main.FIND_IN_PAGE_SEARCH_STRING
|
||||
|
||||
data class SearchInPreviousScreen(private val searchString: String) : SideEffect<Unit> {
|
||||
override fun invokeWith(activity: AppCompatActivity) {
|
||||
activity.setNavigationResult(searchString, FIND_IN_PAGE_SEARCH_STRING)
|
||||
activity.popNavigationBackstack()
|
||||
val coreMainActivity = activity as CoreMainActivity
|
||||
|
||||
// Remove current ReaderFragment. Bug Fix #4377
|
||||
coreMainActivity.navController.popBackStack(
|
||||
coreMainActivity.readerFragmentRoute,
|
||||
inclusive = true
|
||||
)
|
||||
|
||||
// Launch fresh ReaderFragment so all the previous arguments will remove.
|
||||
coreMainActivity.navController.navigate(coreMainActivity.readerFragmentRoute)
|
||||
|
||||
// Pass search result to the *new* instance
|
||||
activity.setNavigationResultOnCurrent(searchString, FIND_IN_PAGE_SEARCH_STRING)
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
@ -19,12 +19,13 @@
|
||||
package org.kiwix.kiwixmobile.core.search.viewmodel.effects
|
||||
|
||||
import android.content.Intent
|
||||
import androidx.navigation.NavHostController
|
||||
import io.mockk.every
|
||||
import io.mockk.mockk
|
||||
import io.mockk.mockkConstructor
|
||||
import io.mockk.verify
|
||||
import io.mockk.verifyOrder
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.popNavigationBackstack
|
||||
import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.setNavigationResult
|
||||
import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.setNavigationResultOnCurrent
|
||||
import org.kiwix.kiwixmobile.core.main.CoreMainActivity
|
||||
import org.kiwix.kiwixmobile.core.main.FIND_IN_PAGE_SEARCH_STRING
|
||||
|
||||
@ -33,11 +34,20 @@ internal class SearchInPreviousScreenTest {
|
||||
fun `invoke with returns positive result with string to previous screen`() {
|
||||
val searchString = "search"
|
||||
mockkConstructor(Intent::class)
|
||||
val activity = mockk<CoreMainActivity>(relaxed = true)
|
||||
|
||||
// Mock the activity & navController
|
||||
val mockNavController = mockk<NavHostController>(relaxed = true)
|
||||
val activity = mockk<CoreMainActivity>(relaxed = true) {
|
||||
every { readerFragmentRoute } returns "readerRoute"
|
||||
every { navController } returns mockNavController
|
||||
}
|
||||
|
||||
SearchInPreviousScreen(searchString).invokeWith(activity)
|
||||
verify {
|
||||
activity.setNavigationResult(searchString, FIND_IN_PAGE_SEARCH_STRING)
|
||||
activity.popNavigationBackstack()
|
||||
|
||||
verifyOrder {
|
||||
mockNavController.popBackStack("readerRoute", true)
|
||||
mockNavController.navigate("readerRoute")
|
||||
activity.setNavigationResultOnCurrent(searchString, FIND_IN_PAGE_SEARCH_STRING)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -29,6 +29,7 @@ import androidx.core.content.pm.ShortcutInfoCompat
|
||||
import androidx.core.content.pm.ShortcutManagerCompat
|
||||
import androidx.core.graphics.drawable.IconCompat
|
||||
import androidx.core.net.toUri
|
||||
import androidx.navigation.NavOptions
|
||||
import androidx.navigation.compose.rememberNavController
|
||||
import org.kiwix.kiwixmobile.core.CoreApp
|
||||
import org.kiwix.kiwixmobile.core.R.drawable
|
||||
@ -182,7 +183,8 @@ class CustomMainActivity : CoreMainActivity() {
|
||||
searchString = searchString,
|
||||
isOpenedFromTabView = isOpenedFromTabView,
|
||||
isVoice = isVoice
|
||||
)
|
||||
),
|
||||
NavOptions.Builder().setPopUpTo(searchFragmentRoute, inclusive = true).build()
|
||||
)
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user