diff --git a/app/src/androidTest/java/org/kiwix/kiwixmobile/BaseActivityTest.kt b/app/src/androidTest/java/org/kiwix/kiwixmobile/BaseActivityTest.kt index ce0c62018..010bddc0e 100644 --- a/app/src/androidTest/java/org/kiwix/kiwixmobile/BaseActivityTest.kt +++ b/app/src/androidTest/java/org/kiwix/kiwixmobile/BaseActivityTest.kt @@ -21,7 +21,7 @@ package org.kiwix.kiwixmobile import android.Manifest.permission import android.content.Context import android.os.Build -import androidx.test.ext.junit.rules.ActivityScenarioRule +import androidx.test.core.app.ActivityScenario import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation import androidx.test.rule.GrantPermissionRule @@ -33,8 +33,7 @@ import org.kiwix.kiwixmobile.main.KiwixMainActivity @RunWith(AndroidJUnit4::class) abstract class BaseActivityTest { - @get:Rule - open var activityScenarioRule = ActivityScenarioRule(KiwixMainActivity::class.java) + open lateinit var activityScenario: ActivityScenario private val permissions = if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) { arrayOf( diff --git a/app/src/androidTest/java/org/kiwix/kiwixmobile/download/DownloadTest.kt b/app/src/androidTest/java/org/kiwix/kiwixmobile/download/DownloadTest.kt index 0b9fa155d..f941b4a55 100644 --- a/app/src/androidTest/java/org/kiwix/kiwixmobile/download/DownloadTest.kt +++ b/app/src/androidTest/java/org/kiwix/kiwixmobile/download/DownloadTest.kt @@ -19,6 +19,7 @@ package org.kiwix.kiwixmobile.download import android.util.Log import androidx.core.content.edit +import androidx.lifecycle.Lifecycle import androidx.preference.PreferenceManager import androidx.test.core.app.ActivityScenario import androidx.test.espresso.IdlingPolicies @@ -73,11 +74,13 @@ class DownloadTest : BaseActivityTest() { putBoolean(SharedPreferenceUtil.IS_PLAY_STORE_BUILD, true) putBoolean(SharedPreferenceUtil.PREF_IS_TEST, true) } + activityScenario = ActivityScenario.launch(KiwixMainActivity::class.java).apply { + moveToState(Lifecycle.State.RESUMED) + } } @Test fun downloadTest() { - ActivityScenario.launch(KiwixMainActivity::class.java) BaristaSleepInteractions.sleep(TestUtils.TEST_PAUSE_MS.toLong()) try { downloadRobot { diff --git a/app/src/androidTest/java/org/kiwix/kiwixmobile/help/HelpFragmentTest.kt b/app/src/androidTest/java/org/kiwix/kiwixmobile/help/HelpFragmentTest.kt index 81ceaf153..59a2b09f0 100644 --- a/app/src/androidTest/java/org/kiwix/kiwixmobile/help/HelpFragmentTest.kt +++ b/app/src/androidTest/java/org/kiwix/kiwixmobile/help/HelpFragmentTest.kt @@ -17,6 +17,8 @@ */ package org.kiwix.kiwixmobile.help +import androidx.lifecycle.Lifecycle +import androidx.test.core.app.ActivityScenario import androidx.test.platform.app.InstrumentationRegistry import androidx.test.uiautomator.UiDevice import leakcanary.LeakAssertions @@ -25,6 +27,7 @@ import org.junit.Rule import org.junit.Test import org.kiwix.kiwixmobile.BaseActivityTest import org.kiwix.kiwixmobile.R +import org.kiwix.kiwixmobile.main.KiwixMainActivity import org.kiwix.kiwixmobile.testutils.RetryRule import org.kiwix.kiwixmobile.testutils.TestUtils.closeSystemDialogs import org.kiwix.kiwixmobile.testutils.TestUtils.isSystemUINotRespondingDialogVisible @@ -39,6 +42,9 @@ class HelpFragmentTest : BaseActivityTest() { } waitForIdle() } + activityScenario = ActivityScenario.launch(KiwixMainActivity::class.java).apply { + moveToState(Lifecycle.State.RESUMED) + } } @Rule @@ -47,7 +53,7 @@ class HelpFragmentTest : BaseActivityTest() { @Test fun verifyHelpActivity() { - activityScenarioRule.scenario.onActivity { + activityScenario.onActivity { it.navigate(R.id.helpFragment) } help { diff --git a/app/src/androidTest/java/org/kiwix/kiwixmobile/initial/download/InitialDownloadTest.kt b/app/src/androidTest/java/org/kiwix/kiwixmobile/initial/download/InitialDownloadTest.kt index 88f18c264..826eeed20 100644 --- a/app/src/androidTest/java/org/kiwix/kiwixmobile/initial/download/InitialDownloadTest.kt +++ b/app/src/androidTest/java/org/kiwix/kiwixmobile/initial/download/InitialDownloadTest.kt @@ -19,6 +19,7 @@ package org.kiwix.kiwixmobile.initial.download import androidx.core.content.edit +import androidx.lifecycle.Lifecycle import androidx.preference.PreferenceManager import androidx.test.core.app.ActivityScenario import androidx.test.ext.junit.runners.AndroidJUnit4 @@ -63,11 +64,13 @@ class InitialDownloadTest : BaseActivityTest() { putBoolean(SharedPreferenceUtil.IS_PLAY_STORE_BUILD, true) putBoolean(SharedPreferenceUtil.PREF_IS_TEST, true) } + activityScenario = ActivityScenario.launch(KiwixMainActivity::class.java).apply { + moveToState(Lifecycle.State.RESUMED) + } } @Test fun initialDownloadTest() { - ActivityScenario.launch(KiwixMainActivity::class.java) BaristaSleepInteractions.sleep(TestUtils.TEST_PAUSE_MS_FOR_SEARCH_TEST.toLong()) initialDownload { clickLibraryOnBottomNav() diff --git a/app/src/androidTest/java/org/kiwix/kiwixmobile/intro/IntroFragmentTest.kt b/app/src/androidTest/java/org/kiwix/kiwixmobile/intro/IntroFragmentTest.kt index e7a544b68..f60c1ab16 100644 --- a/app/src/androidTest/java/org/kiwix/kiwixmobile/intro/IntroFragmentTest.kt +++ b/app/src/androidTest/java/org/kiwix/kiwixmobile/intro/IntroFragmentTest.kt @@ -18,7 +18,9 @@ package org.kiwix.kiwixmobile.intro import androidx.core.content.edit +import androidx.lifecycle.Lifecycle import androidx.preference.PreferenceManager +import androidx.test.core.app.ActivityScenario import androidx.test.platform.app.InstrumentationRegistry import androidx.test.uiautomator.UiDevice import leakcanary.LeakAssertions @@ -28,6 +30,7 @@ import org.junit.Test import org.kiwix.kiwixmobile.BaseActivityTest import org.kiwix.kiwixmobile.R import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil +import org.kiwix.kiwixmobile.main.KiwixMainActivity import org.kiwix.kiwixmobile.testutils.RetryRule import org.kiwix.kiwixmobile.testutils.TestUtils.closeSystemDialogs import org.kiwix.kiwixmobile.testutils.TestUtils.isSystemUINotRespondingDialogVisible @@ -40,7 +43,7 @@ class IntroFragmentTest : BaseActivityTest() { @Test fun viewIsSwipeableAndNavigatesToMain() { - activityScenarioRule.scenario.onActivity { + activityScenario.onActivity { it.navigate(R.id.introFragment) } intro(IntroRobot::swipeLeft) clickGetStarted {} @@ -58,5 +61,8 @@ class IntroFragmentTest : BaseActivityTest() { PreferenceManager.getDefaultSharedPreferences(context).edit { putBoolean(SharedPreferenceUtil.PREF_SHOW_INTRO, true) } + activityScenario = ActivityScenario.launch(KiwixMainActivity::class.java).apply { + moveToState(Lifecycle.State.RESUMED) + } } } diff --git a/app/src/androidTest/java/org/kiwix/kiwixmobile/main/TopLevelDestinationTest.kt b/app/src/androidTest/java/org/kiwix/kiwixmobile/main/TopLevelDestinationTest.kt index 0a7f4d417..feaab76db 100644 --- a/app/src/androidTest/java/org/kiwix/kiwixmobile/main/TopLevelDestinationTest.kt +++ b/app/src/androidTest/java/org/kiwix/kiwixmobile/main/TopLevelDestinationTest.kt @@ -18,6 +18,7 @@ package org.kiwix.kiwixmobile.main import androidx.core.content.edit +import androidx.lifecycle.Lifecycle import androidx.preference.PreferenceManager import androidx.test.core.app.ActivityScenario import androidx.test.platform.app.InstrumentationRegistry @@ -59,11 +60,13 @@ class TopLevelDestinationTest : BaseActivityTest() { putBoolean(SharedPreferenceUtil.PREF_IS_TEST, true) putBoolean(SharedPreferenceUtil.PREF_EXTERNAL_LINK_POPUP, true) } + activityScenario = ActivityScenario.launch(KiwixMainActivity::class.java).apply { + moveToState(Lifecycle.State.RESUMED) + } } @Test fun testTopLevelDestination() { - ActivityScenario.launch(KiwixMainActivity::class.java) topLevel { clickReaderOnBottomNav { } diff --git a/app/src/androidTest/java/org/kiwix/kiwixmobile/mimetype/MimeTypeTest.kt b/app/src/androidTest/java/org/kiwix/kiwixmobile/mimetype/MimeTypeTest.kt index e4d4af0b3..7eda9eb45 100644 --- a/app/src/androidTest/java/org/kiwix/kiwixmobile/mimetype/MimeTypeTest.kt +++ b/app/src/androidTest/java/org/kiwix/kiwixmobile/mimetype/MimeTypeTest.kt @@ -19,7 +19,9 @@ package org.kiwix.kiwixmobile.mimetype import androidx.core.content.edit +import androidx.lifecycle.Lifecycle import androidx.preference.PreferenceManager +import androidx.test.core.app.ActivityScenario import androidx.test.platform.app.InstrumentationRegistry import androidx.test.uiautomator.UiDevice import org.junit.Assert @@ -30,6 +32,7 @@ import org.kiwix.kiwixmobile.BaseActivityTest import org.kiwix.kiwixmobile.core.NightModeConfig import org.kiwix.kiwixmobile.core.reader.ZimFileReader import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil +import org.kiwix.kiwixmobile.main.KiwixMainActivity import org.kiwix.kiwixmobile.testutils.TestUtils.closeSystemDialogs import org.kiwix.kiwixmobile.testutils.TestUtils.isSystemUINotRespondingDialogVisible import java.io.File @@ -50,6 +53,9 @@ class MimeTypeTest : BaseActivityTest() { putBoolean(SharedPreferenceUtil.PREF_SHOW_INTRO, false) putBoolean(SharedPreferenceUtil.PREF_WIFI_ONLY, false) } + activityScenario = ActivityScenario.launch(KiwixMainActivity::class.java).apply { + moveToState(Lifecycle.State.RESUMED) + } } @Test diff --git a/app/src/androidTest/java/org/kiwix/kiwixmobile/nav/destination/library/LocalLibraryTest.kt b/app/src/androidTest/java/org/kiwix/kiwixmobile/nav/destination/library/LocalLibraryTest.kt index 4b3b81269..3573ec79a 100644 --- a/app/src/androidTest/java/org/kiwix/kiwixmobile/nav/destination/library/LocalLibraryTest.kt +++ b/app/src/androidTest/java/org/kiwix/kiwixmobile/nav/destination/library/LocalLibraryTest.kt @@ -20,6 +20,7 @@ package org.kiwix.kiwixmobile.nav.destination.library import androidx.core.content.ContextCompat import androidx.core.content.edit +import androidx.lifecycle.Lifecycle import androidx.preference.PreferenceManager import androidx.test.core.app.ActivityScenario import androidx.test.platform.app.InstrumentationRegistry @@ -65,11 +66,14 @@ class LocalLibraryTest : BaseActivityTest() { // manage external storage permission dialog on android 11 and above putBoolean(SharedPreferenceUtil.PREF_MANAGE_EXTERNAL_FILES, false) } + activityScenario = ActivityScenario.launch(KiwixMainActivity::class.java).apply { + moveToState(Lifecycle.State.RESUMED) + } } @Test fun testLocalLibrary() { - ActivityScenario.launch(KiwixMainActivity::class.java).onActivity { + activityScenario.onActivity { it.navigate(R.id.libraryFragment) } library { diff --git a/app/src/androidTest/java/org/kiwix/kiwixmobile/note/NoteFragmentTest.kt b/app/src/androidTest/java/org/kiwix/kiwixmobile/note/NoteFragmentTest.kt index d7851cd8f..db0ad516c 100644 --- a/app/src/androidTest/java/org/kiwix/kiwixmobile/note/NoteFragmentTest.kt +++ b/app/src/androidTest/java/org/kiwix/kiwixmobile/note/NoteFragmentTest.kt @@ -18,6 +18,8 @@ package org.kiwix.kiwixmobile.note +import androidx.lifecycle.Lifecycle +import androidx.test.core.app.ActivityScenario import androidx.test.platform.app.InstrumentationRegistry import androidx.test.uiautomator.UiDevice import leakcanary.LeakAssertions @@ -26,6 +28,7 @@ import org.junit.Rule import org.junit.Test import org.kiwix.kiwixmobile.BaseActivityTest import org.kiwix.kiwixmobile.R +import org.kiwix.kiwixmobile.main.KiwixMainActivity import org.kiwix.kiwixmobile.testutils.RetryRule import org.kiwix.kiwixmobile.testutils.TestUtils.closeSystemDialogs import org.kiwix.kiwixmobile.testutils.TestUtils.isSystemUINotRespondingDialogVisible @@ -44,11 +47,14 @@ class NoteFragmentTest : BaseActivityTest() { } waitForIdle() } + activityScenario = ActivityScenario.launch(KiwixMainActivity::class.java).apply { + moveToState(Lifecycle.State.RESUMED) + } } @Test fun verifyNoteFragment() { - activityScenarioRule.scenario.onActivity { + activityScenario.onActivity { it.navigate(R.id.notesFragment) } note { diff --git a/app/src/androidTest/java/org/kiwix/kiwixmobile/page/history/NavigationHistoryTest.kt b/app/src/androidTest/java/org/kiwix/kiwixmobile/page/history/NavigationHistoryTest.kt index e13772dd0..e2e1aa4c6 100644 --- a/app/src/androidTest/java/org/kiwix/kiwixmobile/page/history/NavigationHistoryTest.kt +++ b/app/src/androidTest/java/org/kiwix/kiwixmobile/page/history/NavigationHistoryTest.kt @@ -20,6 +20,7 @@ package org.kiwix.kiwixmobile.page.history import androidx.core.content.edit import androidx.core.net.toUri +import androidx.lifecycle.Lifecycle import androidx.preference.PreferenceManager import androidx.test.core.app.ActivityScenario import androidx.test.internal.runner.junit4.statement.UiThreadStatement @@ -63,11 +64,14 @@ class NavigationHistoryTest : BaseActivityTest() { putBoolean(SharedPreferenceUtil.PREF_WIFI_ONLY, false) putBoolean(SharedPreferenceUtil.PREF_IS_TEST, true) } + activityScenario = ActivityScenario.launch(KiwixMainActivity::class.java).apply { + moveToState(Lifecycle.State.RESUMED) + } } @Test fun navigationHistoryDialogTest() { - ActivityScenario.launch(KiwixMainActivity::class.java).onActivity { + activityScenario.onActivity { kiwixMainActivity = it kiwixMainActivity.navigate(R.id.libraryFragment) } diff --git a/app/src/androidTest/java/org/kiwix/kiwixmobile/reader/KiwixReaderFragmentTest.kt b/app/src/androidTest/java/org/kiwix/kiwixmobile/reader/KiwixReaderFragmentTest.kt index 283fad338..28466b8a3 100644 --- a/app/src/androidTest/java/org/kiwix/kiwixmobile/reader/KiwixReaderFragmentTest.kt +++ b/app/src/androidTest/java/org/kiwix/kiwixmobile/reader/KiwixReaderFragmentTest.kt @@ -20,6 +20,7 @@ package org.kiwix.kiwixmobile.reader import androidx.core.content.edit import androidx.core.net.toUri +import androidx.lifecycle.Lifecycle import androidx.preference.PreferenceManager import androidx.test.core.app.ActivityScenario import androidx.test.internal.runner.junit4.statement.UiThreadStatement @@ -62,11 +63,14 @@ class KiwixReaderFragmentTest : BaseActivityTest() { putBoolean(SharedPreferenceUtil.PREF_WIFI_ONLY, false) putBoolean(SharedPreferenceUtil.PREF_IS_TEST, true) } + activityScenario = ActivityScenario.launch(KiwixMainActivity::class.java).apply { + moveToState(Lifecycle.State.RESUMED) + } } @Test fun testTabClosedDialog() { - ActivityScenario.launch(KiwixMainActivity::class.java).onActivity { + activityScenario.onActivity { kiwixMainActivity = it kiwixMainActivity.navigate(R.id.libraryFragment) } diff --git a/app/src/androidTest/java/org/kiwix/kiwixmobile/search/SearchFragmentTest.kt b/app/src/androidTest/java/org/kiwix/kiwixmobile/search/SearchFragmentTest.kt index 8bee43c52..350d42ef0 100644 --- a/app/src/androidTest/java/org/kiwix/kiwixmobile/search/SearchFragmentTest.kt +++ b/app/src/androidTest/java/org/kiwix/kiwixmobile/search/SearchFragmentTest.kt @@ -19,6 +19,7 @@ package org.kiwix.kiwixmobile.search import androidx.core.content.edit import androidx.core.net.toUri +import androidx.lifecycle.Lifecycle import androidx.preference.PreferenceManager import androidx.test.core.app.ActivityScenario import androidx.test.internal.runner.junit4.statement.UiThreadStatement @@ -62,11 +63,14 @@ class SearchFragmentTest : BaseActivityTest() { putBoolean(SharedPreferenceUtil.PREF_WIFI_ONLY, false) putBoolean(SharedPreferenceUtil.PREF_IS_TEST, true) } + activityScenario = ActivityScenario.launch(KiwixMainActivity::class.java).apply { + moveToState(Lifecycle.State.RESUMED) + } } @Test fun searchFragmentSimple() { - ActivityScenario.launch(KiwixMainActivity::class.java).onActivity { + activityScenario.onActivity { kiwixMainActivity = it kiwixMainActivity.navigate(R.id.libraryFragment) } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreReaderFragment.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreReaderFragment.kt index 76b056a49..db380ee46 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreReaderFragment.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreReaderFragment.kt @@ -1041,6 +1041,12 @@ abstract class CoreReaderFragment : tts = null } tempWebViewForUndo = null + // to fix IntroFragmentTest see https://github.com/kiwix/kiwix-android/pull/3217 + try { + requireActivity().unbindService(serviceConnection) + } catch (ignore: IllegalArgumentException) { + // to handle if service is already unbounded + } readAloudService?.registerCallBack(null) readAloudService = null storagePermissionForNotesLauncher?.unregister()