mirror of
https://github.com/kiwix/kiwix-android.git
synced 2025-09-24 05:04:50 -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.lifecycleScope
|
||||||
import androidx.lifecycle.repeatOnLifecycle
|
import androidx.lifecycle.repeatOnLifecycle
|
||||||
import androidx.navigation.NavController
|
import androidx.navigation.NavController
|
||||||
|
import androidx.navigation.NavOptions
|
||||||
import androidx.navigation.compose.rememberNavController
|
import androidx.navigation.compose.rememberNavController
|
||||||
import eu.mhutti1.utils.storage.StorageDevice
|
import eu.mhutti1.utils.storage.StorageDevice
|
||||||
import eu.mhutti1.utils.storage.StorageDeviceUtils
|
import eu.mhutti1.utils.storage.StorageDeviceUtils
|
||||||
@ -368,7 +369,8 @@ class KiwixMainActivity : CoreMainActivity() {
|
|||||||
searchString = searchString,
|
searchString = searchString,
|
||||||
isOpenedFromTabView = isOpenedFromTabView,
|
isOpenedFromTabView = isOpenedFromTabView,
|
||||||
isVoice = isVoice
|
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 androidx.appcompat.app.AppCompatActivity
|
||||||
import org.kiwix.kiwixmobile.core.base.SideEffect
|
import org.kiwix.kiwixmobile.core.base.SideEffect
|
||||||
import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.popNavigationBackstack
|
import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.setNavigationResultOnCurrent
|
||||||
import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.setNavigationResult
|
import org.kiwix.kiwixmobile.core.main.CoreMainActivity
|
||||||
import org.kiwix.kiwixmobile.core.main.FIND_IN_PAGE_SEARCH_STRING
|
import org.kiwix.kiwixmobile.core.main.FIND_IN_PAGE_SEARCH_STRING
|
||||||
|
|
||||||
data class SearchInPreviousScreen(private val searchString: String) : SideEffect<Unit> {
|
data class SearchInPreviousScreen(private val searchString: String) : SideEffect<Unit> {
|
||||||
override fun invokeWith(activity: AppCompatActivity) {
|
override fun invokeWith(activity: AppCompatActivity) {
|
||||||
activity.setNavigationResult(searchString, FIND_IN_PAGE_SEARCH_STRING)
|
val coreMainActivity = activity as CoreMainActivity
|
||||||
activity.popNavigationBackstack()
|
|
||||||
|
// 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 {
|
companion object {
|
||||||
|
@ -19,12 +19,13 @@
|
|||||||
package org.kiwix.kiwixmobile.core.search.viewmodel.effects
|
package org.kiwix.kiwixmobile.core.search.viewmodel.effects
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
import androidx.navigation.NavHostController
|
||||||
|
import io.mockk.every
|
||||||
import io.mockk.mockk
|
import io.mockk.mockk
|
||||||
import io.mockk.mockkConstructor
|
import io.mockk.mockkConstructor
|
||||||
import io.mockk.verify
|
import io.mockk.verifyOrder
|
||||||
import org.junit.jupiter.api.Test
|
import org.junit.jupiter.api.Test
|
||||||
import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.popNavigationBackstack
|
import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.setNavigationResultOnCurrent
|
||||||
import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.setNavigationResult
|
|
||||||
import org.kiwix.kiwixmobile.core.main.CoreMainActivity
|
import org.kiwix.kiwixmobile.core.main.CoreMainActivity
|
||||||
import org.kiwix.kiwixmobile.core.main.FIND_IN_PAGE_SEARCH_STRING
|
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`() {
|
fun `invoke with returns positive result with string to previous screen`() {
|
||||||
val searchString = "search"
|
val searchString = "search"
|
||||||
mockkConstructor(Intent::class)
|
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)
|
SearchInPreviousScreen(searchString).invokeWith(activity)
|
||||||
verify {
|
|
||||||
activity.setNavigationResult(searchString, FIND_IN_PAGE_SEARCH_STRING)
|
verifyOrder {
|
||||||
activity.popNavigationBackstack()
|
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.content.pm.ShortcutManagerCompat
|
||||||
import androidx.core.graphics.drawable.IconCompat
|
import androidx.core.graphics.drawable.IconCompat
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
|
import androidx.navigation.NavOptions
|
||||||
import androidx.navigation.compose.rememberNavController
|
import androidx.navigation.compose.rememberNavController
|
||||||
import org.kiwix.kiwixmobile.core.CoreApp
|
import org.kiwix.kiwixmobile.core.CoreApp
|
||||||
import org.kiwix.kiwixmobile.core.R.drawable
|
import org.kiwix.kiwixmobile.core.R.drawable
|
||||||
@ -182,7 +183,8 @@ class CustomMainActivity : CoreMainActivity() {
|
|||||||
searchString = searchString,
|
searchString = searchString,
|
||||||
isOpenedFromTabView = isOpenedFromTabView,
|
isOpenedFromTabView = isOpenedFromTabView,
|
||||||
isVoice = isVoice
|
isVoice = isVoice
|
||||||
)
|
),
|
||||||
|
NavOptions.Builder().setPopUpTo(searchFragmentRoute, inclusive = true).build()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user