mirror of
https://github.com/kiwix/kiwix-android.git
synced 2025-09-08 23:07:26 -04:00
Merge pull request #3849 from kiwix/Fix#3848
Fixed: Improve article search in our application.
This commit is contained in:
commit
95ef46adf5
@ -43,6 +43,7 @@ import org.kiwix.kiwixmobile.core.dao.entities.BookmarkEntity
|
||||
import org.kiwix.kiwixmobile.core.data.remote.ObjectBoxToLibkiwixMigrator
|
||||
import org.kiwix.kiwixmobile.core.di.modules.DatabaseModule
|
||||
import org.kiwix.kiwixmobile.core.page.bookmark.adapter.LibkiwixBookmarkItem
|
||||
import org.kiwix.kiwixmobile.core.utils.LanguageUtils.Companion.handleLocaleChange
|
||||
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
||||
import org.kiwix.kiwixmobile.main.KiwixMainActivity
|
||||
import org.kiwix.kiwixmobile.testutils.RetryRule
|
||||
@ -96,10 +97,16 @@ class ObjectBoxToLibkiwixMigratorTest : BaseActivityTest() {
|
||||
putBoolean(SharedPreferenceUtil.PREF_IS_TEST, true)
|
||||
putBoolean(SharedPreferenceUtil.IS_PLAY_STORE_BUILD, true)
|
||||
putBoolean(SharedPreferenceUtil.PREF_PLAY_STORE_RESTRICTION, false)
|
||||
putString(SharedPreferenceUtil.PREF_LANG, "en")
|
||||
}
|
||||
activityScenario = ActivityScenario.launch(KiwixMainActivity::class.java).apply {
|
||||
moveToState(Lifecycle.State.RESUMED)
|
||||
onActivity {
|
||||
handleLocaleChange(
|
||||
it,
|
||||
"en",
|
||||
SharedPreferenceUtil(context)
|
||||
)
|
||||
it.navigate(R.id.libraryFragment)
|
||||
}
|
||||
}
|
||||
|
@ -60,6 +60,7 @@ class DeepLinksTest : BaseActivityTest() {
|
||||
setIsPlayStoreBuildType(true)
|
||||
prefIsTest = true
|
||||
playStoreRestrictionPermissionDialog = false
|
||||
putPrefLanguage("en")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -37,6 +37,8 @@ import org.kiwix.kiwixmobile.R
|
||||
import org.kiwix.kiwixmobile.core.utils.files.Log
|
||||
import org.kiwix.kiwixmobile.download.DownloadTest.Companion.KIWIX_DOWNLOAD_TEST
|
||||
import org.kiwix.kiwixmobile.testutils.TestUtils
|
||||
import org.kiwix.kiwixmobile.testutils.TestUtils.testFlakyView
|
||||
import org.kiwix.kiwixmobile.utils.RecyclerViewMatcher
|
||||
|
||||
fun downloadRobot(func: DownloadRobot.() -> Unit) =
|
||||
DownloadRobot().applyWithViewHierarchyPrinting(func)
|
||||
@ -57,12 +59,15 @@ class DownloadRobot : BaseRobot() {
|
||||
|
||||
fun waitForDataToLoad() {
|
||||
try {
|
||||
isVisible(Text(zimFileTitle))
|
||||
isVisible(TextId(R.string.your_languages))
|
||||
} catch (e: RuntimeException) {
|
||||
if (retryCountForDataToLoad > 0) {
|
||||
retryCountForDataToLoad--
|
||||
waitForDataToLoad()
|
||||
return
|
||||
}
|
||||
// throw the exception when there is no more retry left.
|
||||
throw RuntimeException("Couldn't load the online library list.\n Original exception = $e")
|
||||
}
|
||||
}
|
||||
|
||||
@ -75,7 +80,14 @@ class DownloadRobot : BaseRobot() {
|
||||
}
|
||||
|
||||
fun downloadZimFile() {
|
||||
clickOn(Text(zimFileTitle))
|
||||
pauseForBetterTestPerformance()
|
||||
testFlakyView({
|
||||
onView(
|
||||
RecyclerViewMatcher(R.id.libraryList).atPosition(
|
||||
1
|
||||
)
|
||||
).perform(click())
|
||||
})
|
||||
}
|
||||
|
||||
fun assertDownloadStart() {
|
||||
|
@ -38,6 +38,7 @@ import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.kiwix.kiwixmobile.BaseActivityTest
|
||||
import org.kiwix.kiwixmobile.R
|
||||
import org.kiwix.kiwixmobile.core.utils.LanguageUtils.Companion.handleLocaleChange
|
||||
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
||||
import org.kiwix.kiwixmobile.main.KiwixMainActivity
|
||||
import org.kiwix.kiwixmobile.main.topLevel
|
||||
@ -74,9 +75,17 @@ class DownloadTest : BaseActivityTest() {
|
||||
putBoolean(SharedPreferenceUtil.IS_PLAY_STORE_BUILD, true)
|
||||
putBoolean(SharedPreferenceUtil.PREF_IS_TEST, true)
|
||||
putBoolean(SharedPreferenceUtil.PREF_PLAY_STORE_RESTRICTION, false)
|
||||
putString(SharedPreferenceUtil.PREF_LANG, "en")
|
||||
}
|
||||
activityScenario = ActivityScenario.launch(KiwixMainActivity::class.java).apply {
|
||||
moveToState(Lifecycle.State.RESUMED)
|
||||
onActivity {
|
||||
handleLocaleChange(
|
||||
it,
|
||||
"en",
|
||||
SharedPreferenceUtil(context)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -137,10 +146,10 @@ class DownloadTest : BaseActivityTest() {
|
||||
// change the application language
|
||||
topLevel {
|
||||
clickSettingsOnSideNav {
|
||||
clickOnLanguagePreference()
|
||||
clickLanguagePreference()
|
||||
assertLanguagePrefDialogDisplayed()
|
||||
selectDeviceDefaultLanguage()
|
||||
clickOnLanguagePreference()
|
||||
clickLanguagePreference()
|
||||
assertLanguagePrefDialogDisplayed()
|
||||
selectAlbanianLanguage()
|
||||
}
|
||||
@ -159,7 +168,7 @@ class DownloadTest : BaseActivityTest() {
|
||||
// select the default device language to perform other test cases.
|
||||
topLevel {
|
||||
clickSettingsOnSideNav {
|
||||
clickOnLanguagePreference()
|
||||
clickLanguagePreference()
|
||||
assertLanguagePrefDialogDisplayed()
|
||||
selectDeviceDefaultLanguage()
|
||||
// check if the device default language is selected or not.
|
||||
|
@ -30,6 +30,7 @@ import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.kiwix.kiwixmobile.BaseActivityTest
|
||||
import org.kiwix.kiwixmobile.R
|
||||
import org.kiwix.kiwixmobile.core.utils.LanguageUtils.Companion.handleLocaleChange
|
||||
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
||||
import org.kiwix.kiwixmobile.main.KiwixMainActivity
|
||||
import org.kiwix.kiwixmobile.testutils.RetryRule
|
||||
@ -51,6 +52,13 @@ class HelpFragmentTest : BaseActivityTest() {
|
||||
}
|
||||
activityScenario = ActivityScenario.launch(KiwixMainActivity::class.java).apply {
|
||||
moveToState(Lifecycle.State.RESUMED)
|
||||
onActivity {
|
||||
handleLocaleChange(
|
||||
it,
|
||||
"en",
|
||||
SharedPreferenceUtil(context)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -113,6 +121,7 @@ class HelpFragmentTest : BaseActivityTest() {
|
||||
putPrefWifiOnly(false)
|
||||
setIsPlayStoreBuildType(showRestriction)
|
||||
prefIsTest = true
|
||||
putPrefLanguage("en")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -34,6 +34,7 @@ import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.kiwix.kiwixmobile.BaseActivityTest
|
||||
import org.kiwix.kiwixmobile.R
|
||||
import org.kiwix.kiwixmobile.core.utils.LanguageUtils.Companion.handleLocaleChange
|
||||
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
||||
import org.kiwix.kiwixmobile.main.KiwixMainActivity
|
||||
import org.kiwix.kiwixmobile.nav.destination.library.library
|
||||
@ -65,9 +66,17 @@ class InitialDownloadTest : BaseActivityTest() {
|
||||
putBoolean(SharedPreferenceUtil.IS_PLAY_STORE_BUILD, true)
|
||||
putBoolean(SharedPreferenceUtil.PREF_IS_TEST, true)
|
||||
putBoolean(SharedPreferenceUtil.PREF_PLAY_STORE_RESTRICTION, false)
|
||||
putString(SharedPreferenceUtil.PREF_LANG, "en")
|
||||
}
|
||||
activityScenario = ActivityScenario.launch(KiwixMainActivity::class.java).apply {
|
||||
moveToState(Lifecycle.State.RESUMED)
|
||||
onActivity {
|
||||
handleLocaleChange(
|
||||
it,
|
||||
"en",
|
||||
SharedPreferenceUtil(context)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -29,6 +29,7 @@ import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.kiwix.kiwixmobile.BaseActivityTest
|
||||
import org.kiwix.kiwixmobile.R
|
||||
import org.kiwix.kiwixmobile.core.utils.LanguageUtils.Companion.handleLocaleChange
|
||||
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
||||
import org.kiwix.kiwixmobile.main.KiwixMainActivity
|
||||
import org.kiwix.kiwixmobile.testutils.RetryRule
|
||||
@ -60,9 +61,17 @@ class IntroFragmentTest : BaseActivityTest() {
|
||||
}
|
||||
PreferenceManager.getDefaultSharedPreferences(context).edit {
|
||||
putBoolean(SharedPreferenceUtil.PREF_SHOW_INTRO, true)
|
||||
putString(SharedPreferenceUtil.PREF_LANG, "en")
|
||||
}
|
||||
activityScenario = ActivityScenario.launch(KiwixMainActivity::class.java).apply {
|
||||
moveToState(Lifecycle.State.RESUMED)
|
||||
onActivity {
|
||||
handleLocaleChange(
|
||||
it,
|
||||
"en",
|
||||
SharedPreferenceUtil(context)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -33,6 +33,7 @@ import org.junit.Before
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.kiwix.kiwixmobile.core.utils.LanguageUtils.Companion.handleLocaleChange
|
||||
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
||||
import org.kiwix.kiwixmobile.main.KiwixMainActivity
|
||||
import org.kiwix.kiwixmobile.testutils.RetryRule
|
||||
@ -75,9 +76,17 @@ class LanguageFragmentTest {
|
||||
putBoolean(SharedPreferenceUtil.PREF_SHOW_INTRO, false)
|
||||
putBoolean(SharedPreferenceUtil.PREF_WIFI_ONLY, false)
|
||||
putBoolean(SharedPreferenceUtil.PREF_PLAY_STORE_RESTRICTION, false)
|
||||
putString(SharedPreferenceUtil.PREF_LANG, "en")
|
||||
}
|
||||
ActivityScenario.launch(KiwixMainActivity::class.java).apply {
|
||||
moveToState(Lifecycle.State.RESUMED)
|
||||
onActivity {
|
||||
handleLocaleChange(
|
||||
it,
|
||||
"en",
|
||||
SharedPreferenceUtil(instrumentation.targetContext.applicationContext)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -34,6 +34,7 @@ import org.junit.Before
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.kiwix.kiwixmobile.R
|
||||
import org.kiwix.kiwixmobile.core.utils.LanguageUtils.Companion.handleLocaleChange
|
||||
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
||||
import org.kiwix.kiwixmobile.main.KiwixMainActivity
|
||||
import org.kiwix.kiwixmobile.nav.destination.library.library
|
||||
@ -86,6 +87,13 @@ class LocalFileTransferTest {
|
||||
shouldShowShowCaseFeatureToUser(false)
|
||||
activityScenario = ActivityScenario.launch(KiwixMainActivity::class.java).apply {
|
||||
moveToState(Lifecycle.State.RESUMED)
|
||||
onActivity {
|
||||
handleLocaleChange(
|
||||
it,
|
||||
"en",
|
||||
SharedPreferenceUtil(context)
|
||||
)
|
||||
}
|
||||
}
|
||||
StandardActions.closeDrawer()
|
||||
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1) {
|
||||
@ -113,6 +121,11 @@ class LocalFileTransferTest {
|
||||
activityScenario = ActivityScenario.launch(KiwixMainActivity::class.java).apply {
|
||||
moveToState(Lifecycle.State.RESUMED)
|
||||
onActivity {
|
||||
handleLocaleChange(
|
||||
it,
|
||||
"en",
|
||||
SharedPreferenceUtil(context)
|
||||
)
|
||||
it.navigate(R.id.libraryFragment)
|
||||
}
|
||||
}
|
||||
@ -161,6 +174,7 @@ class LocalFileTransferTest {
|
||||
putBoolean(SharedPreferenceUtil.PREF_IS_TEST, true)
|
||||
putBoolean(SharedPreferenceUtil.PREF_SHOW_SHOWCASE, shouldShowShowCase)
|
||||
putBoolean(SharedPreferenceUtil.PREF_PLAY_STORE_RESTRICTION, false)
|
||||
putString(SharedPreferenceUtil.PREF_LANG, "en")
|
||||
}
|
||||
if (isResetShowCaseId) {
|
||||
// To clear showCaseID to ensure the showcase view will show.
|
||||
|
@ -28,6 +28,7 @@ import org.junit.Before
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.kiwix.kiwixmobile.BaseActivityTest
|
||||
import org.kiwix.kiwixmobile.core.utils.LanguageUtils.Companion.handleLocaleChange
|
||||
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
||||
import org.kiwix.kiwixmobile.help.HelpRobot
|
||||
import org.kiwix.kiwixmobile.localFileTransfer.LocalFileTransferRobot
|
||||
@ -61,9 +62,17 @@ class TopLevelDestinationTest : BaseActivityTest() {
|
||||
putBoolean(SharedPreferenceUtil.PREF_EXTERNAL_LINK_POPUP, true)
|
||||
putBoolean(SharedPreferenceUtil.PREF_SHOW_SHOWCASE, false)
|
||||
putBoolean(SharedPreferenceUtil.PREF_PLAY_STORE_RESTRICTION, false)
|
||||
putString(SharedPreferenceUtil.PREF_LANG, "en")
|
||||
}
|
||||
activityScenario = ActivityScenario.launch(KiwixMainActivity::class.java).apply {
|
||||
moveToState(Lifecycle.State.RESUMED)
|
||||
onActivity {
|
||||
handleLocaleChange(
|
||||
it,
|
||||
"en",
|
||||
SharedPreferenceUtil(context)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -55,6 +55,7 @@ class MimeTypeTest : BaseActivityTest() {
|
||||
putBoolean(SharedPreferenceUtil.PREF_SHOW_INTRO, false)
|
||||
putBoolean(SharedPreferenceUtil.PREF_WIFI_ONLY, false)
|
||||
putBoolean(SharedPreferenceUtil.PREF_PLAY_STORE_RESTRICTION, false)
|
||||
putString(SharedPreferenceUtil.PREF_LANG, "en")
|
||||
}
|
||||
activityScenario = ActivityScenario.launch(KiwixMainActivity::class.java).apply {
|
||||
moveToState(Lifecycle.State.RESUMED)
|
||||
|
@ -114,6 +114,7 @@ class PlayStoreRestrictionDialogTest {
|
||||
setIsPlayStoreBuildType(true)
|
||||
prefIsTest = true
|
||||
playStoreRestrictionPermissionDialog = showDialog
|
||||
putPrefLanguage("en")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -32,6 +32,7 @@ import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.kiwix.kiwixmobile.BaseActivityTest
|
||||
import org.kiwix.kiwixmobile.R
|
||||
import org.kiwix.kiwixmobile.core.utils.LanguageUtils.Companion.handleLocaleChange
|
||||
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
||||
import org.kiwix.kiwixmobile.main.KiwixMainActivity
|
||||
import org.kiwix.kiwixmobile.testutils.RetryRule
|
||||
@ -70,9 +71,17 @@ class LocalLibraryTest : BaseActivityTest() {
|
||||
// while refreshing the content in LocalLibraryFragment.
|
||||
putBoolean(SharedPreferenceUtil.PREF_SHOW_MANAGE_PERMISSION_DIALOG_ON_REFRESH, false)
|
||||
putBoolean(SharedPreferenceUtil.PREF_PLAY_STORE_RESTRICTION, false)
|
||||
putString(SharedPreferenceUtil.PREF_LANG, "en")
|
||||
}
|
||||
activityScenario = ActivityScenario.launch(KiwixMainActivity::class.java).apply {
|
||||
moveToState(Lifecycle.State.RESUMED)
|
||||
onActivity {
|
||||
handleLocaleChange(
|
||||
it,
|
||||
"en",
|
||||
SharedPreferenceUtil(context)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -33,6 +33,7 @@ import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.kiwix.kiwixmobile.BaseActivityTest
|
||||
import org.kiwix.kiwixmobile.R
|
||||
import org.kiwix.kiwixmobile.core.utils.LanguageUtils.Companion.handleLocaleChange
|
||||
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
||||
import org.kiwix.kiwixmobile.main.KiwixMainActivity
|
||||
import org.kiwix.kiwixmobile.nav.destination.library.LocalLibraryFragmentDirections
|
||||
@ -66,9 +67,17 @@ class NoteFragmentTest : BaseActivityTest() {
|
||||
putBoolean(SharedPreferenceUtil.PREF_WIFI_ONLY, false)
|
||||
putBoolean(SharedPreferenceUtil.PREF_IS_TEST, true)
|
||||
putBoolean(SharedPreferenceUtil.PREF_PLAY_STORE_RESTRICTION, false)
|
||||
putString(SharedPreferenceUtil.PREF_LANG, "en")
|
||||
}
|
||||
activityScenario = ActivityScenario.launch(KiwixMainActivity::class.java).apply {
|
||||
moveToState(Lifecycle.State.RESUMED)
|
||||
onActivity {
|
||||
handleLocaleChange(
|
||||
it,
|
||||
"en",
|
||||
SharedPreferenceUtil(context)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -32,6 +32,7 @@ import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.kiwix.kiwixmobile.BaseActivityTest
|
||||
import org.kiwix.kiwixmobile.R
|
||||
import org.kiwix.kiwixmobile.core.utils.LanguageUtils.Companion.handleLocaleChange
|
||||
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
||||
import org.kiwix.kiwixmobile.main.KiwixMainActivity
|
||||
import org.kiwix.kiwixmobile.main.topLevel
|
||||
@ -63,9 +64,17 @@ class LibkiwixBookmarkTest : BaseActivityTest() {
|
||||
putBoolean(SharedPreferenceUtil.PREF_WIFI_ONLY, false)
|
||||
putBoolean(SharedPreferenceUtil.PREF_IS_TEST, true)
|
||||
putBoolean(SharedPreferenceUtil.PREF_PLAY_STORE_RESTRICTION, false)
|
||||
putString(SharedPreferenceUtil.PREF_LANG, "en")
|
||||
}
|
||||
activityScenario = ActivityScenario.launch(KiwixMainActivity::class.java).apply {
|
||||
moveToState(Lifecycle.State.RESUMED)
|
||||
onActivity {
|
||||
handleLocaleChange(
|
||||
it,
|
||||
"en",
|
||||
SharedPreferenceUtil(context)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -33,6 +33,7 @@ import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.kiwix.kiwixmobile.BaseActivityTest
|
||||
import org.kiwix.kiwixmobile.R
|
||||
import org.kiwix.kiwixmobile.core.utils.LanguageUtils.Companion.handleLocaleChange
|
||||
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
||||
import org.kiwix.kiwixmobile.main.KiwixMainActivity
|
||||
import org.kiwix.kiwixmobile.nav.destination.library.LocalLibraryFragmentDirections
|
||||
@ -65,9 +66,17 @@ class NavigationHistoryTest : BaseActivityTest() {
|
||||
putBoolean(SharedPreferenceUtil.PREF_WIFI_ONLY, false)
|
||||
putBoolean(SharedPreferenceUtil.PREF_IS_TEST, true)
|
||||
putBoolean(SharedPreferenceUtil.PREF_PLAY_STORE_RESTRICTION, false)
|
||||
putString(SharedPreferenceUtil.PREF_LANG, "en")
|
||||
}
|
||||
activityScenario = ActivityScenario.launch(KiwixMainActivity::class.java).apply {
|
||||
moveToState(Lifecycle.State.RESUMED)
|
||||
onActivity {
|
||||
handleLocaleChange(
|
||||
it,
|
||||
"en",
|
||||
SharedPreferenceUtil(context)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -31,6 +31,7 @@ import org.junit.Test
|
||||
import org.kiwix.kiwixmobile.BaseActivityTest
|
||||
import org.kiwix.kiwixmobile.core.NightModeConfig
|
||||
import org.kiwix.kiwixmobile.core.reader.ZimFileReader
|
||||
import org.kiwix.kiwixmobile.core.utils.LanguageUtils.Companion.handleLocaleChange
|
||||
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
||||
import org.kiwix.kiwixmobile.main.KiwixMainActivity
|
||||
import org.kiwix.kiwixmobile.testutils.TestUtils
|
||||
@ -54,9 +55,17 @@ class EncodedUrlTest : BaseActivityTest() {
|
||||
putBoolean(SharedPreferenceUtil.PREF_SHOW_INTRO, false)
|
||||
putBoolean(SharedPreferenceUtil.PREF_WIFI_ONLY, false)
|
||||
putBoolean(SharedPreferenceUtil.PREF_PLAY_STORE_RESTRICTION, false)
|
||||
putString(SharedPreferenceUtil.PREF_LANG, "en")
|
||||
}
|
||||
activityScenario = ActivityScenario.launch(KiwixMainActivity::class.java).apply {
|
||||
moveToState(Lifecycle.State.RESUMED)
|
||||
onActivity {
|
||||
handleLocaleChange(
|
||||
it,
|
||||
"en",
|
||||
SharedPreferenceUtil(context)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -33,6 +33,7 @@ import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.kiwix.kiwixmobile.BaseActivityTest
|
||||
import org.kiwix.kiwixmobile.R
|
||||
import org.kiwix.kiwixmobile.core.utils.LanguageUtils.Companion.handleLocaleChange
|
||||
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
||||
import org.kiwix.kiwixmobile.main.KiwixMainActivity
|
||||
import org.kiwix.kiwixmobile.nav.destination.library.LocalLibraryFragmentDirections
|
||||
@ -63,9 +64,17 @@ class KiwixReaderFragmentTest : BaseActivityTest() {
|
||||
putBoolean(SharedPreferenceUtil.PREF_WIFI_ONLY, false)
|
||||
putBoolean(SharedPreferenceUtil.PREF_IS_TEST, true)
|
||||
putBoolean(SharedPreferenceUtil.PREF_PLAY_STORE_RESTRICTION, false)
|
||||
putString(SharedPreferenceUtil.PREF_LANG, "en")
|
||||
}
|
||||
activityScenario = ActivityScenario.launch(KiwixMainActivity::class.java).apply {
|
||||
moveToState(Lifecycle.State.RESUMED)
|
||||
onActivity {
|
||||
handleLocaleChange(
|
||||
it,
|
||||
"en",
|
||||
SharedPreferenceUtil(context)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -36,6 +36,7 @@ import org.kiwix.kiwixmobile.BaseActivityTest
|
||||
import org.kiwix.kiwixmobile.R
|
||||
import org.kiwix.kiwixmobile.core.NightModeConfig
|
||||
import org.kiwix.kiwixmobile.core.reader.ZimFileReader
|
||||
import org.kiwix.kiwixmobile.core.utils.LanguageUtils.Companion.handleLocaleChange
|
||||
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
||||
import org.kiwix.kiwixmobile.main.KiwixMainActivity
|
||||
import org.kiwix.kiwixmobile.nav.destination.library.LocalLibraryFragmentDirections
|
||||
@ -68,9 +69,17 @@ class ZimFileReaderWithSplittedZimFileTest : BaseActivityTest() {
|
||||
putBoolean(SharedPreferenceUtil.PREF_SHOW_INTRO, false)
|
||||
putBoolean(SharedPreferenceUtil.PREF_WIFI_ONLY, false)
|
||||
putBoolean(SharedPreferenceUtil.PREF_PLAY_STORE_RESTRICTION, false)
|
||||
putString(SharedPreferenceUtil.PREF_LANG, "en")
|
||||
}
|
||||
activityScenario = ActivityScenario.launch(KiwixMainActivity::class.java).apply {
|
||||
moveToState(Lifecycle.State.RESUMED)
|
||||
onActivity {
|
||||
handleLocaleChange(
|
||||
it,
|
||||
"en",
|
||||
SharedPreferenceUtil(context)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -35,6 +35,7 @@ import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.kiwix.kiwixmobile.BaseActivityTest
|
||||
import org.kiwix.kiwixmobile.R
|
||||
import org.kiwix.kiwixmobile.core.utils.LanguageUtils.Companion.handleLocaleChange
|
||||
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
||||
import org.kiwix.kiwixmobile.main.KiwixMainActivity
|
||||
import org.kiwix.kiwixmobile.nav.destination.library.LocalLibraryFragmentDirections.actionNavigationLibraryToNavigationReader
|
||||
@ -73,9 +74,17 @@ class SearchFragmentTest : BaseActivityTest() {
|
||||
putBoolean(SharedPreferenceUtil.PREF_WIFI_ONLY, false)
|
||||
putBoolean(SharedPreferenceUtil.PREF_IS_TEST, true)
|
||||
putBoolean(SharedPreferenceUtil.PREF_PLAY_STORE_RESTRICTION, false)
|
||||
putString(SharedPreferenceUtil.PREF_LANG, "en")
|
||||
}
|
||||
activityScenario = ActivityScenario.launch(KiwixMainActivity::class.java).apply {
|
||||
moveToState(Lifecycle.State.RESUMED)
|
||||
onActivity {
|
||||
handleLocaleChange(
|
||||
it,
|
||||
"en",
|
||||
SharedPreferenceUtil(context)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -157,6 +166,23 @@ class SearchFragmentTest : BaseActivityTest() {
|
||||
// go to reader screen
|
||||
pressBack()
|
||||
}
|
||||
|
||||
// Added test for checking the crash scenario where the application was crashing when we
|
||||
// frequently searched for article, and clicked on the searched item.
|
||||
search {
|
||||
// test by searching 10 article and clicking on them
|
||||
searchAndClickOnArticle(searchQueryForDownloadedZimFile)
|
||||
searchAndClickOnArticle("A Song")
|
||||
searchAndClickOnArticle("The Ra")
|
||||
searchAndClickOnArticle("The Ge")
|
||||
searchAndClickOnArticle("Wish")
|
||||
searchAndClickOnArticle("WIFI")
|
||||
searchAndClickOnArticle("Woman")
|
||||
searchAndClickOnArticle("Big Ba")
|
||||
searchAndClickOnArticle("My Wor")
|
||||
searchAndClickOnArticle("100")
|
||||
assertArticleLoaded()
|
||||
}
|
||||
removeTemporaryZimFilesToFreeUpDeviceStorage()
|
||||
LeakAssertions.assertNoLeaks()
|
||||
}
|
||||
|
@ -20,26 +20,27 @@ package org.kiwix.kiwixmobile.search
|
||||
|
||||
import android.view.KeyEvent
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import androidx.recyclerview.widget.RecyclerView.ViewHolder
|
||||
import androidx.test.espresso.Espresso.onView
|
||||
import androidx.test.espresso.action.ViewActions.clearText
|
||||
import androidx.test.espresso.action.ViewActions.click
|
||||
import androidx.test.espresso.action.ViewActions.typeText
|
||||
import androidx.test.espresso.assertion.ViewAssertions.matches
|
||||
import androidx.test.espresso.contrib.RecyclerViewActions.actionOnItemAtPosition
|
||||
import androidx.test.espresso.contrib.RecyclerViewActions.scrollToPosition
|
||||
import androidx.test.espresso.matcher.ViewMatchers.isDescendantOfA
|
||||
import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
|
||||
import androidx.test.espresso.matcher.ViewMatchers.hasDescendant
|
||||
import androidx.test.espresso.matcher.ViewMatchers.withId
|
||||
import androidx.test.espresso.matcher.ViewMatchers.withText
|
||||
import androidx.test.espresso.web.sugar.Web.onWebView
|
||||
import androidx.test.espresso.web.webdriver.DriverAtoms.findElement
|
||||
import androidx.test.espresso.web.webdriver.Locator
|
||||
import androidx.test.uiautomator.UiDevice
|
||||
import applyWithViewHierarchyPrinting
|
||||
import com.adevinta.android.barista.interaction.BaristaSleepInteractions
|
||||
import org.hamcrest.Matchers.allOf
|
||||
import com.adevinta.android.barista.internal.matcher.HelperMatchers.atPosition
|
||||
import org.kiwix.kiwixmobile.BaseRobot
|
||||
import org.kiwix.kiwixmobile.Findable.ViewId
|
||||
import org.kiwix.kiwixmobile.core.R
|
||||
import org.kiwix.kiwixmobile.testutils.TestUtils
|
||||
import org.kiwix.kiwixmobile.testutils.TestUtils.testFlakyView
|
||||
|
||||
fun search(func: SearchRobot.() -> Unit) = SearchRobot().applyWithViewHierarchyPrinting(func)
|
||||
|
||||
@ -67,29 +68,24 @@ class SearchRobot : BaseRobot() {
|
||||
}
|
||||
|
||||
fun searchWithFrequentlyTypedWords(query: String, wait: Long = 0L) {
|
||||
val searchView = onView(withId(R.id.search_src_text))
|
||||
for (char in query) {
|
||||
searchView.perform(typeText(char.toString()))
|
||||
if (wait != 0L) {
|
||||
BaristaSleepInteractions.sleep(wait)
|
||||
testFlakyView({
|
||||
val searchView = onView(withId(R.id.search_src_text))
|
||||
for (char in query) {
|
||||
searchView.perform(typeText(char.toString()))
|
||||
if (wait != 0L) {
|
||||
BaristaSleepInteractions.sleep(wait)
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
fun assertSearchSuccessful(searchResult: String) {
|
||||
BaristaSleepInteractions.sleep(TestUtils.TEST_PAUSE_MS_FOR_SEARCH_TEST.toLong())
|
||||
val recyclerViewId = R.id.search_list
|
||||
|
||||
// Scroll to the first position in the RecyclerView
|
||||
onView(withId(recyclerViewId)).perform(scrollToPosition<ViewHolder>(0))
|
||||
|
||||
// Match the view at the first position in the RecyclerView
|
||||
onView(withText(searchResult)).check(
|
||||
onView(withId(recyclerViewId)).check(
|
||||
matches(
|
||||
allOf(
|
||||
isDisplayed(),
|
||||
isDescendantOfA(withId(recyclerViewId))
|
||||
)
|
||||
atPosition(0, hasDescendant(withText(searchResult)))
|
||||
)
|
||||
)
|
||||
}
|
||||
@ -106,4 +102,26 @@ class SearchRobot : BaseRobot() {
|
||||
val searchView = onView(withId(R.id.search_src_text))
|
||||
searchView.perform(clearText())
|
||||
}
|
||||
|
||||
private fun openSearchScreen() {
|
||||
testFlakyView({ onView(withId(R.id.menu_search)).perform(click()) })
|
||||
}
|
||||
|
||||
fun searchAndClickOnArticle(searchString: String) {
|
||||
openSearchScreen()
|
||||
searchWithFrequentlyTypedWords(searchString)
|
||||
clickOnSearchItemInSearchList()
|
||||
}
|
||||
|
||||
fun assertArticleLoaded() {
|
||||
testFlakyView({
|
||||
onWebView()
|
||||
.withElement(
|
||||
findElement(
|
||||
Locator.XPATH,
|
||||
"//*[contains(text(), 'Big Baby DRAM')]"
|
||||
)
|
||||
)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -28,6 +28,8 @@ import org.junit.Before
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.kiwix.kiwixmobile.R
|
||||
import org.kiwix.kiwixmobile.core.utils.LanguageUtils.Companion.handleLocaleChange
|
||||
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
||||
import org.kiwix.kiwixmobile.intro.IntroRobot
|
||||
import org.kiwix.kiwixmobile.intro.intro
|
||||
import org.kiwix.kiwixmobile.main.KiwixMainActivity
|
||||
@ -69,6 +71,11 @@ class KiwixSettingsFragmentTest {
|
||||
}
|
||||
UiThreadStatement.runOnUiThread {
|
||||
activityScenarioRule.scenario.onActivity {
|
||||
handleLocaleChange(
|
||||
it,
|
||||
"en",
|
||||
SharedPreferenceUtil(it)
|
||||
)
|
||||
it.navigate(R.id.introFragment)
|
||||
}
|
||||
}
|
||||
|
@ -78,7 +78,22 @@ class SettingsRobot : BaseRobot() {
|
||||
}
|
||||
|
||||
fun clickLanguagePreference() {
|
||||
clickRecyclerViewItems(R.string.device_default)
|
||||
testFlakyView({
|
||||
onView(
|
||||
withResourceName("recycler_view")
|
||||
).perform(
|
||||
actionOnItem<RecyclerView.ViewHolder>(
|
||||
hasDescendant(
|
||||
Matchers.anyOf(
|
||||
withText("shqip"),
|
||||
withText("English"),
|
||||
withText(R.string.device_default)
|
||||
)
|
||||
),
|
||||
ViewActions.click()
|
||||
)
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
fun assertLanguagePrefDialogDisplayed() {
|
||||
@ -128,21 +143,6 @@ class SettingsRobot : BaseRobot() {
|
||||
clickRecyclerViewItems(R.string.pref_info_version)
|
||||
}
|
||||
|
||||
fun clickOnLanguagePreference() {
|
||||
try {
|
||||
clickRecyclerViewItems(R.string.device_default)
|
||||
} catch (ignore: Exception) {
|
||||
// if the device language Albanian
|
||||
onView(
|
||||
withResourceName("recycler_view")
|
||||
).perform(
|
||||
actionOnItem<RecyclerView.ViewHolder>(
|
||||
hasDescendant(Matchers.anyOf(withText("shqip"))), ViewActions.click()
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun selectAlbanianLanguage() {
|
||||
testFlakyView({
|
||||
onData(anything()).inAdapterView(withId(R.id.select_dialog_listview)).atPosition(2)
|
||||
|
@ -31,6 +31,7 @@ import org.junit.Before
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.kiwix.kiwixmobile.R
|
||||
import org.kiwix.kiwixmobile.core.utils.LanguageUtils.Companion.handleLocaleChange
|
||||
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
||||
import org.kiwix.kiwixmobile.main.KiwixMainActivity
|
||||
import org.kiwix.kiwixmobile.nav.destination.library.library
|
||||
@ -88,10 +89,18 @@ class ZimHostFragmentTest {
|
||||
setIsPlayStoreBuildType(true)
|
||||
prefIsTest = true
|
||||
playStoreRestrictionPermissionDialog = false
|
||||
putPrefLanguage("en")
|
||||
}
|
||||
}
|
||||
activityScenario = ActivityScenario.launch(KiwixMainActivity::class.java).apply {
|
||||
moveToState(Lifecycle.State.RESUMED)
|
||||
onActivity {
|
||||
handleLocaleChange(
|
||||
it,
|
||||
"en",
|
||||
SharedPreferenceUtil(it)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -86,15 +86,8 @@ class ZimReaderContainer @Inject constructor(private val zimFileReaderFactory: F
|
||||
}
|
||||
}
|
||||
|
||||
fun copyReader(): ZimFileReader? = runBlocking {
|
||||
zimFile?.let { zimFileReaderFactory.create(it) }
|
||||
?: assetFileDescriptor?.let { zimFileReaderFactory.create(it) }
|
||||
}
|
||||
|
||||
val zimFile get() = zimFileReader?.zimFile
|
||||
|
||||
val assetFileDescriptor get() = zimFileReader?.assetFileDescriptor
|
||||
|
||||
/**
|
||||
* Return the zimFile path if opened from file else return the filePath of assetFileDescriptor
|
||||
*/
|
||||
@ -112,5 +105,3 @@ class ZimReaderContainer @Inject constructor(private val zimFileReaderFactory: F
|
||||
val favicon get() = zimFileReader?.favicon
|
||||
val language get() = zimFileReader?.language
|
||||
}
|
||||
|
||||
data class SearchResult(val title: String?)
|
||||
|
@ -285,6 +285,15 @@ class SearchFragment : BaseFragment() {
|
||||
}
|
||||
|
||||
private suspend fun render(state: SearchState) {
|
||||
// Check if the fragment is visible on the screen. This method called multiple times
|
||||
// (7-14 times) when an item in the search list is clicked, which leads to unnecessary
|
||||
// data loading and also causes a crash.
|
||||
// The issue arises because the searchViewModel takes a moment to detach from the window,
|
||||
// and during this time, this method is called multiple times due to the rendering process.
|
||||
// To avoid unnecessary data loading and prevent crashes, we check if the search screen is
|
||||
// visible to the user before proceeding. If the screen is not visible,
|
||||
// we skip the data loading process.
|
||||
if (!isVisible) return
|
||||
searchMutex.withLock {
|
||||
// `cancelAndJoin` cancels the previous running job and waits for it to completely cancel.
|
||||
renderingJob?.cancelAndJoin()
|
||||
|
@ -113,12 +113,10 @@ class SearchViewModel @Inject constructor(
|
||||
@Suppress("DEPRECATION")
|
||||
private fun searchResults() = filter.asFlow()
|
||||
.mapLatest {
|
||||
val zimFileReader = zimReaderContainer.copyReader()
|
||||
try {
|
||||
SearchResultsWithTerm(it, searchResultGenerator.generateSearchResults(it, zimFileReader))
|
||||
} finally {
|
||||
zimFileReader?.dispose()
|
||||
}
|
||||
SearchResultsWithTerm(
|
||||
it,
|
||||
searchResultGenerator.generateSearchResults(it, zimReaderContainer.zimFileReader)
|
||||
)
|
||||
}
|
||||
|
||||
private suspend fun actionMapper() = actions.consumeEach {
|
||||
|
@ -100,7 +100,7 @@ internal class SearchViewModelTest {
|
||||
Dispatchers.setMain(testDispatcher)
|
||||
clearAllMocks()
|
||||
recentsFromDb = Channel(kotlinx.coroutines.channels.Channel.UNLIMITED)
|
||||
every { zimReaderContainer.copyReader() } returns zimFileReader
|
||||
every { zimReaderContainer.zimFileReader } returns zimFileReader
|
||||
coEvery {
|
||||
searchResultGenerator.generateSearchResults("", zimFileReader)
|
||||
} returns null
|
||||
|
Loading…
x
Reference in New Issue
Block a user