1
0
Fork 0

For #6832 - Fix various fragment not attached to a context crashes

master
ekager 2020-04-21 20:41:20 -07:00 committed by Emily Kager
parent 6457a02a82
commit c4e83367f6
31 changed files with 78 additions and 98 deletions

View File

@ -94,7 +94,7 @@ class AddonDetailsFragment : Fragment(R.layout.fragment_add_on_details) {
} }
private fun showUpdaterDialog(addon: Addon) { private fun showUpdaterDialog(addon: Addon) {
lifecycleScope.launch(IO) { viewLifecycleOwner.lifecycleScope.launch(IO) {
val updateAttempt = updateAttemptStorage.findUpdateAttemptBy(addon.id) val updateAttempt = updateAttemptStorage.findUpdateAttemptBy(addon.id)
updateAttempt?.let { updateAttempt?.let {
withContext(Main) { withContext(Main) {

View File

@ -98,10 +98,10 @@ class AddonsManagementFragment : Fragment(R.layout.fragment_add_ons_management),
private fun bindRecyclerView(view: View) { private fun bindRecyclerView(view: View) {
val recyclerView = view.add_ons_list val recyclerView = view.add_ons_list
recyclerView.layoutManager = LinearLayoutManager(requireContext()) recyclerView.layoutManager = LinearLayoutManager(requireContext())
lifecycleScope.launch(IO) { viewLifecycleOwner.lifecycleScope.launch(IO) {
try { try {
val addons = requireContext().components.addonManager.getAddons() val addons = requireContext().components.addonManager.getAddons()
lifecycleScope.launch(Dispatchers.Main) { viewLifecycleOwner.lifecycleScope.launch(Dispatchers.Main) {
runIfFragmentIsAttached { runIfFragmentIsAttached {
val adapter = AddonsManagerAdapter( val adapter = AddonsManagerAdapter(
requireContext().components.addonCollectionProvider, requireContext().components.addonCollectionProvider,
@ -117,9 +117,12 @@ class AddonsManagementFragment : Fragment(R.layout.fragment_add_ons_management),
} }
} }
} catch (e: AddonManagerException) { } catch (e: AddonManagerException) {
lifecycleScope.launch(Dispatchers.Main) { viewLifecycleOwner.lifecycleScope.launch(Dispatchers.Main) {
runIfFragmentIsAttached { runIfFragmentIsAttached {
showSnackBar(view, getString(R.string.mozac_feature_addons_failed_to_query_add_ons)) showSnackBar(
view,
getString(R.string.mozac_feature_addons_failed_to_query_add_ons)
)
isInstallationInProgress = false isInstallationInProgress = false
view.add_ons_progress_bar.isVisible = false view.add_ons_progress_bar.isVisible = false
view.add_ons_empty_message.isVisible = true view.add_ons_empty_message.isVisible = true
@ -220,7 +223,10 @@ class AddonsManagementFragment : Fragment(R.layout.fragment_add_ons_management),
val rootView = activity?.getRootView() ?: view val rootView = activity?.getRootView() ?: view
showSnackBar( showSnackBar(
rootView, rootView,
getString(R.string.mozac_feature_addons_failed_to_install, addon.translatedName) getString(
R.string.mozac_feature_addons_failed_to_install,
addon.translatedName
)
) )
addonProgressOverlay?.visibility = View.GONE addonProgressOverlay?.visibility = View.GONE
isInstallationInProgress = false isInstallationInProgress = false

View File

@ -89,7 +89,6 @@ import org.mozilla.fenix.ext.requireComponents
import org.mozilla.fenix.ext.sessionsOfType import org.mozilla.fenix.ext.sessionsOfType
import org.mozilla.fenix.ext.settings import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.home.SharedViewModel import org.mozilla.fenix.home.SharedViewModel
import org.mozilla.fenix.settings.SupportUtils
import org.mozilla.fenix.theme.ThemeManager import org.mozilla.fenix.theme.ThemeManager
import org.mozilla.fenix.wifi.SitePermissionsWifiIntegration import org.mozilla.fenix.wifi.SitePermissionsWifiIntegration
import java.lang.ref.WeakReference import java.lang.ref.WeakReference
@ -186,7 +185,6 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
return getSessionById()?.also { session -> return getSessionById()?.also { session ->
val browserToolbarController = DefaultBrowserToolbarController( val browserToolbarController = DefaultBrowserToolbarController(
store = browserFragmentStore,
activity = requireActivity(), activity = requireActivity(),
navController = findNavController(), navController = findNavController(),
readerModeController = DefaultReaderModeController( readerModeController = DefaultReaderModeController(
@ -194,24 +192,17 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
(activity as HomeActivity).browsingModeManager.mode.isPrivate, (activity as HomeActivity).browsingModeManager.mode.isPrivate,
view.readerViewControlsBar view.readerViewControlsBar
), ),
browsingModeManager = (activity as HomeActivity).browsingModeManager,
sessionManager = requireComponents.core.sessionManager, sessionManager = requireComponents.core.sessionManager,
findInPageLauncher = { findInPageIntegration.withFeature { it.launch() } }, findInPageLauncher = { findInPageIntegration.withFeature { it.launch() } },
engineView = engineView, engineView = engineView,
swipeRefresh = swipeRefresh, swipeRefresh = swipeRefresh,
browserAnimator = browserAnimator, browserAnimator = browserAnimator,
customTabSession = customTabSessionId?.let { sessionManager.findSessionById(it) }, customTabSession = customTabSessionId?.let { sessionManager.findSessionById(it) },
getSupportUrl = {
SupportUtils.getSumoURLForTopic(
context,
SupportUtils.SumoTopic.HELP
)
},
openInFenixIntent = Intent(context, IntentReceiverActivity::class.java).apply { openInFenixIntent = Intent(context, IntentReceiverActivity::class.java).apply {
action = Intent.ACTION_VIEW action = Intent.ACTION_VIEW
}, },
bookmarkTapped = { lifecycleScope.launch { bookmarkTapped(it) } }, bookmarkTapped = { viewLifecycleOwner.lifecycleScope.launch { bookmarkTapped(it) } },
scope = lifecycleScope, scope = viewLifecycleOwner.lifecycleScope,
tabCollectionStorage = requireComponents.core.tabCollectionStorage, tabCollectionStorage = requireComponents.core.tabCollectionStorage,
topSiteStorage = requireComponents.core.topSiteStorage, topSiteStorage = requireComponents.core.topSiteStorage,
sharedViewModel = sharedViewModel sharedViewModel = sharedViewModel
@ -226,7 +217,7 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
shouldUseBottomToolbar = context.settings().shouldUseBottomToolbar, shouldUseBottomToolbar = context.settings().shouldUseBottomToolbar,
interactor = browserInteractor, interactor = browserInteractor,
customTabSession = customTabSessionId?.let { sessionManager.findSessionById(it) }, customTabSession = customTabSessionId?.let { sessionManager.findSessionById(it) },
lifecycleOwner = this.viewLifecycleOwner lifecycleOwner = viewLifecycleOwner
) )
toolbarIntegration.set( toolbarIntegration.set(
@ -725,7 +716,7 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
*/ */
private fun showQuickSettingsDialog() { private fun showQuickSettingsDialog() {
val session = getSessionById() ?: return val session = getSessionById() ?: return
lifecycleScope.launch(Main) { viewLifecycleOwner.lifecycleScope.launch(Main) {
val sitePermissions: SitePermissions? = withContext(IO) { val sitePermissions: SitePermissions? = withContext(IO) {
session.url.toUri().host?.let { host -> session.url.toUri().host?.let { host ->
val storage = requireContext().components.core.permissionStorage val storage = requireContext().components.core.permissionStorage

View File

@ -12,7 +12,6 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import mozilla.components.browser.session.SessionManager import mozilla.components.browser.session.SessionManager
import mozilla.components.feature.tab.collections.TabCollection import mozilla.components.feature.tab.collections.TabCollection
import mozilla.components.feature.tabs.TabsUseCases
import org.mozilla.fenix.components.Analytics import org.mozilla.fenix.components.Analytics
import org.mozilla.fenix.components.TabCollectionStorage import org.mozilla.fenix.components.TabCollectionStorage
import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.components.metrics.Event
@ -64,9 +63,8 @@ class DefaultCollectionCreationController(
private val dismiss: () -> Unit, private val dismiss: () -> Unit,
private val analytics: Analytics, private val analytics: Analytics,
private val tabCollectionStorage: TabCollectionStorage, private val tabCollectionStorage: TabCollectionStorage,
private val tabsUseCases: TabsUseCases,
private val sessionManager: SessionManager, private val sessionManager: SessionManager,
private val lifecycleScope: CoroutineScope private val viewLifecycleScope: CoroutineScope
) : CollectionCreationController { ) : CollectionCreationController {
companion object { companion object {
@ -78,7 +76,7 @@ class DefaultCollectionCreationController(
dismiss() dismiss()
val sessionBundle = tabs.toList().toSessionBundle(sessionManager) val sessionBundle = tabs.toList().toSessionBundle(sessionManager)
lifecycleScope.launch(Dispatchers.IO) { viewLifecycleScope.launch(Dispatchers.IO) {
tabCollectionStorage.createCollection(name, sessionBundle) tabCollectionStorage.createCollection(name, sessionBundle)
} }
@ -89,7 +87,7 @@ class DefaultCollectionCreationController(
override fun renameCollection(collection: TabCollection, name: String) { override fun renameCollection(collection: TabCollection, name: String) {
dismiss() dismiss()
lifecycleScope.launch(Dispatchers.IO) { viewLifecycleScope.launch(Dispatchers.IO) {
tabCollectionStorage.renameCollection(collection, name) tabCollectionStorage.renameCollection(collection, name)
analytics.metrics.track(Event.CollectionRenamed) analytics.metrics.track(Event.CollectionRenamed)
} }
@ -114,7 +112,7 @@ class DefaultCollectionCreationController(
override fun selectCollection(collection: TabCollection, tabs: List<Tab>) { override fun selectCollection(collection: TabCollection, tabs: List<Tab>) {
dismiss() dismiss()
val sessionBundle = tabs.toList().toSessionBundle(sessionManager) val sessionBundle = tabs.toList().toSessionBundle(sessionManager)
lifecycleScope.launch(Dispatchers.IO) { viewLifecycleScope.launch(Dispatchers.IO) {
tabCollectionStorage tabCollectionStorage
.addTabsToCollection(collection, sessionBundle) .addTabsToCollection(collection, sessionBundle)
} }

View File

@ -77,7 +77,6 @@ class CollectionCreationFragment : DialogFragment() {
::dismiss, ::dismiss,
requireComponents.analytics, requireComponents.analytics,
requireComponents.core.tabCollectionStorage, requireComponents.core.tabCollectionStorage,
requireComponents.useCases.tabsUseCases,
requireComponents.core.sessionManager, requireComponents.core.sessionManager,
viewLifecycleOwner.lifecycleScope viewLifecycleOwner.lifecycleScope
) )

View File

@ -29,7 +29,6 @@ import org.mozilla.fenix.browser.BrowserAnimator
import org.mozilla.fenix.browser.BrowserAnimator.Companion.getToolbarNavOptions import org.mozilla.fenix.browser.BrowserAnimator.Companion.getToolbarNavOptions
import org.mozilla.fenix.browser.BrowserFragment import org.mozilla.fenix.browser.BrowserFragment
import org.mozilla.fenix.browser.BrowserFragmentDirections import org.mozilla.fenix.browser.BrowserFragmentDirections
import org.mozilla.fenix.browser.browsingmode.BrowsingModeManager
import org.mozilla.fenix.browser.readermode.ReaderModeController import org.mozilla.fenix.browser.readermode.ReaderModeController
import org.mozilla.fenix.collections.SaveCollectionStep import org.mozilla.fenix.collections.SaveCollectionStep
import org.mozilla.fenix.components.FenixSnackbar import org.mozilla.fenix.components.FenixSnackbar
@ -59,18 +58,15 @@ interface BrowserToolbarController {
@Suppress("LargeClass") @Suppress("LargeClass")
class DefaultBrowserToolbarController( class DefaultBrowserToolbarController(
private val store: BrowserFragmentStore,
private val activity: Activity, private val activity: Activity,
private val navController: NavController, private val navController: NavController,
private val readerModeController: ReaderModeController, private val readerModeController: ReaderModeController,
private val browsingModeManager: BrowsingModeManager,
private val sessionManager: SessionManager, private val sessionManager: SessionManager,
private val findInPageLauncher: () -> Unit, private val findInPageLauncher: () -> Unit,
private val engineView: EngineView, private val engineView: EngineView,
private val browserAnimator: BrowserAnimator, private val browserAnimator: BrowserAnimator,
private val swipeRefresh: SwipeRefreshLayout, private val swipeRefresh: SwipeRefreshLayout,
private val customTabSession: Session?, private val customTabSession: Session?,
private val getSupportUrl: () -> String,
private val openInFenixIntent: Intent, private val openInFenixIntent: Intent,
private val bookmarkTapped: (Session) -> Unit, private val bookmarkTapped: (Session) -> Unit,
private val scope: CoroutineScope, private val scope: CoroutineScope,

View File

@ -214,7 +214,7 @@ class HomeFragment : Fragment() {
fragmentStore = homeFragmentStore, fragmentStore = homeFragmentStore,
navController = findNavController(), navController = findNavController(),
browsingModeManager = browsingModeManager, browsingModeManager = browsingModeManager,
lifecycleScope = viewLifecycleOwner.lifecycleScope, viewLifecycleScope = viewLifecycleOwner.lifecycleScope,
closeTab = ::closeTab, closeTab = ::closeTab,
closeAllTabs = ::closeAllTabs, closeAllTabs = ::closeAllTabs,
getListOfTabs = ::getListOfTabs, getListOfTabs = ::getListOfTabs,
@ -688,7 +688,7 @@ class HomeFragment : Fragment() {
HomeMenu.Item.Quit -> activity?.let { activity -> HomeMenu.Item.Quit -> activity?.let { activity ->
deleteAndQuit( deleteAndQuit(
activity, activity,
lifecycleScope, viewLifecycleOwner.lifecycleScope,
view?.let { view -> FenixSnackbar.make( view?.let { view -> FenixSnackbar.make(
view = view, view = view,
isDisplayedWithBrowserToolbar = false isDisplayedWithBrowserToolbar = false
@ -827,7 +827,7 @@ class HomeFragment : Fragment() {
} }
private fun scrollToTheTop() { private fun scrollToTheTop() {
lifecycleScope.launch(Main) { viewLifecycleOwner.lifecycleScope.launch(Main) {
delay(ANIM_SCROLL_DELAY) delay(ANIM_SCROLL_DELAY)
sessionControlView!!.view.smoothScrollToPosition(0) sessionControlView!!.view.smoothScrollToPosition(0)
} }

View File

@ -175,7 +175,7 @@ class DefaultSessionControlController(
private val fragmentStore: HomeFragmentStore, private val fragmentStore: HomeFragmentStore,
private val navController: NavController, private val navController: NavController,
private val browsingModeManager: BrowsingModeManager, private val browsingModeManager: BrowsingModeManager,
private val lifecycleScope: CoroutineScope, private val viewLifecycleScope: CoroutineScope,
private val closeTab: (sessionId: String) -> Unit, private val closeTab: (sessionId: String) -> Unit,
private val closeAllTabs: (isPrivateMode: Boolean) -> Unit, private val closeAllTabs: (isPrivateMode: Boolean) -> Unit,
private val getListOfTabs: () -> List<Tab>, private val getListOfTabs: () -> List<Tab>,
@ -255,7 +255,7 @@ class DefaultSessionControlController(
override fun handleCollectionRemoveTab(collection: TabCollection, tab: ComponentTab) { override fun handleCollectionRemoveTab(collection: TabCollection, tab: ComponentTab) {
metrics.track(Event.CollectionTabRemoved) metrics.track(Event.CollectionTabRemoved)
lifecycleScope.launch(Dispatchers.IO) { viewLifecycleScope.launch(Dispatchers.IO) {
tabCollectionStorage.removeTabFromCollection(collection, tab) tabCollectionStorage.removeTabFromCollection(collection, tab)
} }
} }
@ -304,7 +304,7 @@ class DefaultSessionControlController(
metrics.track(Event.PocketTopSiteRemoved) metrics.track(Event.PocketTopSiteRemoved)
} }
lifecycleScope.launch(Dispatchers.IO) { viewLifecycleScope.launch(Dispatchers.IO) {
topSiteStorage.removeTopSite(topSite) topSiteStorage.removeTopSite(topSite)
} }
} }

View File

@ -291,7 +291,7 @@ class BookmarkFragment : LibraryPageFragment<BookmarkNode>(), UserInteractionHan
else -> throw IllegalStateException("Illegal event type in onDeleteSome") else -> throw IllegalStateException("Illegal event type in onDeleteSome")
} }
lifecycleScope.allowUndo( viewLifecycleOwner.lifecycleScope.allowUndo(
view!!, message, view!!, message,
getString(R.string.bookmark_undo_deletion), { getString(R.string.bookmark_undo_deletion), {
pendingBookmarksToDelete.removeAll(selected) pendingBookmarksToDelete.removeAll(selected)

View File

@ -57,7 +57,7 @@ class AddBookmarkFolderFragment : Fragment(R.layout.fragment_edit_bookmark) {
super.onResume() super.onResume()
showToolbar(getString(R.string.bookmark_add_folder_fragment_label)) showToolbar(getString(R.string.bookmark_add_folder_fragment_label))
lifecycleScope.launch(Main) { viewLifecycleOwner.lifecycleScope.launch(Main) {
sharedViewModel.selectedFolder = withContext(IO) { sharedViewModel.selectedFolder = withContext(IO) {
sharedViewModel.selectedFolder sharedViewModel.selectedFolder
?: requireComponents.core.bookmarksStorage.getTree(BookmarkRoot.Mobile.id) ?: requireComponents.core.bookmarksStorage.getTree(BookmarkRoot.Mobile.id)
@ -95,7 +95,7 @@ class AddBookmarkFolderFragment : Fragment(R.layout.fragment_edit_bookmark) {
return true return true
} }
this.view?.hideKeyboard() this.view?.hideKeyboard()
lifecycleScope.launch(IO) { viewLifecycleOwner.lifecycleScope.launch(IO) {
val newGuid = requireComponents.core.bookmarksStorage.addFolder( val newGuid = requireComponents.core.bookmarksStorage.addFolder(
sharedViewModel.selectedFolder!!.guid, bookmarkNameEdit.text.toString(), null sharedViewModel.selectedFolder!!.guid, bookmarkNameEdit.text.toString(), null
) )

View File

@ -65,7 +65,7 @@ class EditBookmarkFragment : Fragment(R.layout.fragment_edit_bookmark) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
initToolbar() initToolbar()
lifecycleScope.launch(Main) { viewLifecycleOwner.lifecycleScope.launch(Main) {
val context = requireContext() val context = requireContext()
withContext(IO) { withContext(IO) {
@ -155,7 +155,7 @@ class EditBookmarkFragment : Fragment(R.layout.fragment_edit_bookmark) {
dialog.cancel() dialog.cancel()
} }
setPositiveButton(R.string.tab_collection_dialog_positive) { dialog: DialogInterface, _ -> setPositiveButton(R.string.tab_collection_dialog_positive) { dialog: DialogInterface, _ ->
lifecycleScope.launch(IO) { viewLifecycleOwner.lifecycleScope.launch(IO) {
requireComponents.core.bookmarksStorage.deleteNode(args.guidToEdit) requireComponents.core.bookmarksStorage.deleteNode(args.guidToEdit)
requireComponents.analytics.metrics.track(Event.RemoveBookmark) requireComponents.analytics.metrics.track(Event.RemoveBookmark)
@ -194,7 +194,7 @@ class EditBookmarkFragment : Fragment(R.layout.fragment_edit_bookmark) {
} }
private fun updateBookmarkNode(title: String?, url: String?) { private fun updateBookmarkNode(title: String?, url: String?) {
lifecycleScope.launch(IO) { viewLifecycleOwner.lifecycleScope.launch(IO) {
try { try {
requireComponents.let { components -> requireComponents.let { components ->
if (title != bookmarkNode?.title || url != bookmarkNode?.url) { if (title != bookmarkNode?.title || url != bookmarkNode?.url) {

View File

@ -50,7 +50,7 @@ class SelectBookmarkFolderFragment : Fragment() {
super.onResume() super.onResume()
showToolbar(getString(R.string.bookmark_select_folder_fragment_label)) showToolbar(getString(R.string.bookmark_select_folder_fragment_label))
lifecycleScope.launch(Main) { viewLifecycleOwner.lifecycleScope.launch(Main) {
bookmarkNode = withContext(IO) { bookmarkNode = withContext(IO) {
val context = requireContext() val context = requireContext()
context.components.core.bookmarksStorage context.components.core.bookmarksStorage
@ -74,7 +74,7 @@ class SelectBookmarkFolderFragment : Fragment() {
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.itemId) { return when (item.itemId) {
R.id.add_folder_button -> { R.id.add_folder_button -> {
lifecycleScope.launch(Main) { viewLifecycleOwner.lifecycleScope.launch(Main) {
nav( nav(
R.id.bookmarkSelectFolderFragment, R.id.bookmarkSelectFolderFragment,
SelectBookmarkFolderFragmentDirections SelectBookmarkFolderFragmentDirections

View File

@ -106,7 +106,7 @@ class HistoryFragment : LibraryPageFragment<HistoryItem>(), UserInteractionHandl
} }
private fun deleteHistoryItems(items: Set<HistoryItem>) { private fun deleteHistoryItems(items: Set<HistoryItem>) {
lifecycleScope.launch { viewLifecycleOwner.lifecycleScope.launch {
context?.components?.run { context?.components?.run {
for (item in items) { for (item in items) {
analytics.metrics.track(Event.HistoryItemRemoved) analytics.metrics.track(Event.HistoryItemRemoved)
@ -155,7 +155,7 @@ class HistoryFragment : LibraryPageFragment<HistoryItem>(), UserInteractionHandl
true true
} }
R.id.delete_history_multi_select -> { R.id.delete_history_multi_select -> {
lifecycleScope.launch(Main) { viewLifecycleOwner.lifecycleScope.launch(Main) {
deleteSelectedHistory(historyStore.state.mode.selectedItems, requireComponents) deleteSelectedHistory(historyStore.state.mode.selectedItems, requireComponents)
viewModel.invalidate() viewModel.invalidate()
historyStore.dispatch(HistoryFragmentAction.ExitDeletionMode) historyStore.dispatch(HistoryFragmentAction.ExitDeletionMode)
@ -216,7 +216,7 @@ class HistoryFragment : LibraryPageFragment<HistoryItem>(), UserInteractionHandl
} }
setPositiveButton(R.string.delete_browsing_data_prompt_allow) { dialog: DialogInterface, _ -> setPositiveButton(R.string.delete_browsing_data_prompt_allow) { dialog: DialogInterface, _ ->
historyStore.dispatch(HistoryFragmentAction.EnterDeletionMode) historyStore.dispatch(HistoryFragmentAction.EnterDeletionMode)
lifecycleScope.launch { viewLifecycleOwner.lifecycleScope.launch {
requireComponents.analytics.metrics.track(Event.HistoryAllItemsRemoved) requireComponents.analytics.metrics.track(Event.HistoryAllItemsRemoved)
requireComponents.core.historyStorage.deleteEverything() requireComponents.core.historyStorage.deleteEverything()
launch(Main) { launch(Main) {

View File

@ -47,7 +47,7 @@ class DefaultSearchController(
private val context: Context, private val context: Context,
private val store: SearchFragmentStore, private val store: SearchFragmentStore,
private val navController: NavController, private val navController: NavController,
private val lifecycleScope: CoroutineScope, private val viewLifecycleScope: CoroutineScope,
private val clearToolbarFocus: () -> Unit private val clearToolbarFocus: () -> Unit
) : SearchController { ) : SearchController {
@ -82,7 +82,7 @@ class DefaultSearchController(
} }
override fun handleEditingCancelled() { override fun handleEditingCancelled() {
lifecycleScope.launch { viewLifecycleScope.launch {
clearToolbarFocus() clearToolbarFocus()
// Delay a short amount so the keyboard begins animating away. This makes exit animation // Delay a short amount so the keyboard begins animating away. This makes exit animation
// much smoother instead of having two separate parts (keyboard hides THEN animation) // much smoother instead of having two separate parts (keyboard hides THEN animation)

View File

@ -109,7 +109,7 @@ class SearchFragment : Fragment(), UserInteractionHandler {
context = activity as HomeActivity, context = activity as HomeActivity,
store = searchStore, store = searchStore,
navController = findNavController(), navController = findNavController(),
lifecycleScope = viewLifecycleOwner.lifecycleScope, viewLifecycleScope = viewLifecycleOwner.lifecycleScope,
clearToolbarFocus = ::clearToolbarFocus clearToolbarFocus = ::clearToolbarFocus
) )

View File

@ -69,7 +69,7 @@ class LoginsFragment : PreferenceFragmentCompat(), AccountObserver {
override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) { override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
Log.d(LOG_TAG, "onAuthenticationSucceeded") Log.d(LOG_TAG, "onAuthenticationSucceeded")
lifecycleScope.launch(Main) { viewLifecycleOwner.lifecycleScope.launch(Main) {
// Workaround for likely biometric library bug // Workaround for likely biometric library bug
// https://github.com/mozilla-mobile/fenix/issues/8438 // https://github.com/mozilla-mobile/fenix/issues/8438
delay(SHORT_DELAY_MS) delay(SHORT_DELAY_MS)

View File

@ -51,7 +51,7 @@ class SettingsFragment : PreferenceFragmentCompat() {
private val accountObserver = object : AccountObserver { private val accountObserver = object : AccountObserver {
private fun updateAccountUi(profile: Profile? = null) { private fun updateAccountUi(profile: Profile? = null) {
val context = context ?: return val context = context ?: return
lifecycleScope.launch { viewLifecycleOwner.lifecycleScope.launch {
updateAccountUIState( updateAccountUIState(
context = context, context = context,
profile = profile profile = profile
@ -125,7 +125,8 @@ class SettingsFragment : PreferenceFragmentCompat() {
// update it here if we're not going through the `onCreate->onStart->onResume` lifecycle chain. // update it here if we're not going through the `onCreate->onStart->onResume` lifecycle chain.
update(shouldUpdateAccountUIState = !creatingFragment) update(shouldUpdateAccountUIState = !creatingFragment)
view!!.findViewById<RecyclerView>(R.id.recycler_view)?.hideInitialScrollBar(lifecycleScope) view!!.findViewById<RecyclerView>(R.id.recycler_view)
?.hideInitialScrollBar(viewLifecycleOwner.lifecycleScope)
// Consider finish of `onResume` to be the point at which we consider this fragment as 'created'. // Consider finish of `onResume` to be the point at which we consider this fragment as 'created'.
creatingFragment = false creatingFragment = false
@ -376,10 +377,14 @@ class SettingsFragment : PreferenceFragmentCompat() {
preferenceSignIn?.isVisible = false preferenceSignIn?.isVisible = false
profile?.avatar?.url?.let { avatarUrl -> profile?.avatar?.url?.let { avatarUrl ->
lifecycleScope.launch(Main) { viewLifecycleOwner.lifecycleScope.launch(Main) {
val roundedDrawable = avatarUrl.toRoundedDrawable(context, requireComponents.core.client) val roundedDrawable =
avatarUrl.toRoundedDrawable(context, requireComponents.core.client)
preferenceFirefoxAccount?.icon = preferenceFirefoxAccount?.icon =
roundedDrawable ?: AppCompatResources.getDrawable(context, R.drawable.ic_account) roundedDrawable ?: AppCompatResources.getDrawable(
context,
R.drawable.ic_account
)
} }
} }
preferenceSignIn?.onPreferenceClickListener = null preferenceSignIn?.onPreferenceClickListener = null
@ -420,7 +425,8 @@ class SettingsFragment : PreferenceFragmentCompat() {
settings.overrideSyncTokenServer.isNotEmpty() || settings.overrideSyncTokenServer.isNotEmpty() ||
settings.showSecretDebugMenuThisSession settings.showSecretDebugMenuThisSession
// Only enable changes to these prefs when the user isn't connected to an account. // Only enable changes to these prefs when the user isn't connected to an account.
val enabled = requireComponents.backgroundServices.accountManager.authenticatedAccount() == null val enabled =
requireComponents.backgroundServices.accountManager.authenticatedAccount() == null
preferenceFxAOverride?.apply { preferenceFxAOverride?.apply {
isVisible = show isVisible = show
isEnabled = enabled isEnabled = enabled

View File

@ -55,13 +55,13 @@ class AccountSettingsFragment : PreferenceFragmentCompat() {
// Navigate away from this fragment when we encounter auth problems or logout events. // Navigate away from this fragment when we encounter auth problems or logout events.
private val accountStateObserver = object : AccountObserver { private val accountStateObserver = object : AccountObserver {
override fun onAuthenticationProblems() { override fun onAuthenticationProblems() {
lifecycleScope.launch { viewLifecycleOwner.lifecycleScope.launch {
findNavController().popBackStack() findNavController().popBackStack()
} }
} }
override fun onLoggedOut() { override fun onLoggedOut() {
lifecycleScope.launch { viewLifecycleOwner.lifecycleScope.launch {
findNavController().popBackStack() findNavController().popBackStack()
// Remove the device name when we log out. // Remove the device name when we log out.
@ -266,7 +266,7 @@ class AccountSettingsFragment : PreferenceFragmentCompat() {
} }
private fun syncNow() { private fun syncNow() {
lifecycleScope.launch { viewLifecycleOwner.lifecycleScope.launch {
requireComponents.analytics.metrics.track(Event.SyncAccountSyncNow) requireComponents.analytics.metrics.track(Event.SyncAccountSyncNow)
// Trigger a sync. // Trigger a sync.
requireComponents.backgroundServices.accountManager.syncNowAsync(SyncReason.User) requireComponents.backgroundServices.accountManager.syncNowAsync(SyncReason.User)
@ -285,7 +285,7 @@ class AccountSettingsFragment : PreferenceFragmentCompat() {
return false return false
} }
// This may fail, and we'll have a disparity in the UI until `updateDeviceName` is called. // This may fail, and we'll have a disparity in the UI until `updateDeviceName` is called.
lifecycleScope.launch(Main) { viewLifecycleOwner.lifecycleScope.launch(Main) {
context?.let { context?.let {
accountManager.authenticatedAccount() accountManager.authenticatedAccount()
?.deviceConstellation() ?.deviceConstellation()
@ -336,7 +336,7 @@ class AccountSettingsFragment : PreferenceFragmentCompat() {
private val syncStatusObserver = object : SyncStatusObserver { private val syncStatusObserver = object : SyncStatusObserver {
override fun onStarted() { override fun onStarted() {
lifecycleScope.launch { viewLifecycleOwner.lifecycleScope.launch {
val pref = findPreference<Preference>(getPreferenceKey(R.string.pref_key_sync_now)) val pref = findPreference<Preference>(getPreferenceKey(R.string.pref_key_sync_now))
view?.announceForAccessibility(getString(R.string.sync_syncing_in_progress)) view?.announceForAccessibility(getString(R.string.sync_syncing_in_progress))
pref?.title = getString(R.string.sync_syncing_in_progress) pref?.title = getString(R.string.sync_syncing_in_progress)
@ -347,7 +347,7 @@ class AccountSettingsFragment : PreferenceFragmentCompat() {
// Sync stopped successfully. // Sync stopped successfully.
override fun onIdle() { override fun onIdle() {
lifecycleScope.launch { viewLifecycleOwner.lifecycleScope.launch {
val pref = findPreference<Preference>(getPreferenceKey(R.string.pref_key_sync_now)) val pref = findPreference<Preference>(getPreferenceKey(R.string.pref_key_sync_now))
pref?.let { pref?.let {
pref.title = getString(R.string.preferences_sync_now) pref.title = getString(R.string.preferences_sync_now)
@ -364,7 +364,7 @@ class AccountSettingsFragment : PreferenceFragmentCompat() {
// Sync stopped after encountering a problem. // Sync stopped after encountering a problem.
override fun onError(error: Exception?) { override fun onError(error: Exception?) {
lifecycleScope.launch { viewLifecycleOwner.lifecycleScope.launch {
val pref = findPreference<Preference>(getPreferenceKey(R.string.pref_key_sync_now)) val pref = findPreference<Preference>(getPreferenceKey(R.string.pref_key_sync_now))
pref?.let { pref?.let {
pref.title = getString(R.string.preferences_sync_now) pref.title = getString(R.string.preferences_sync_now)

View File

@ -61,7 +61,7 @@ class SignOutFragment : BottomSheetDialogFragment() {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
view.signOutDisconnect.setOnClickListener { view.signOutDisconnect.setOnClickListener {
lifecycleScope.launch { viewLifecycleOwner.lifecycleScope.launch {
requireComponents requireComponents
.backgroundServices.accountAbnormalities.userRequestedLogout() .backgroundServices.accountAbnormalities.userRequestedLogout()
accountManager.logoutAsync().await() accountManager.logoutAsync().await()

View File

@ -96,7 +96,7 @@ class SavedLoginSiteInfoFragment : Fragment(R.layout.fragment_saved_login_site_i
private fun deleteLogin() { private fun deleteLogin() {
var deleteLoginJob: Deferred<Boolean>? = null var deleteLoginJob: Deferred<Boolean>? = null
val deleteJob = lifecycleScope.launch(IO) { val deleteJob = viewLifecycleOwner.lifecycleScope.launch(IO) {
deleteLoginJob = async { deleteLoginJob = async {
requireContext().components.core.passwordsStorage.delete(args.savedLoginItem.id) requireContext().components.core.passwordsStorage.delete(args.savedLoginItem.id)
} }

View File

@ -136,7 +136,7 @@ class SavedLoginsFragment : Fragment() {
private fun loadAndMapLogins() { private fun loadAndMapLogins() {
var deferredLogins: Deferred<List<Login>>? = null var deferredLogins: Deferred<List<Login>>? = null
val fetchLoginsJob = lifecycleScope.launch(IO) { val fetchLoginsJob = viewLifecycleOwner.lifecycleScope.launch(IO) {
deferredLogins = async { deferredLogins = async {
requireContext().components.core.passwordsStorage.list() requireContext().components.core.passwordsStorage.list()
} }

View File

@ -75,7 +75,7 @@ class QuickSettingsSheetDialogFragment : AppCompatDialogFragment() {
quickSettingsController = DefaultQuickSettingsController( quickSettingsController = DefaultQuickSettingsController(
context = context, context = context,
quickSettingsStore = quickSettingsStore, quickSettingsStore = quickSettingsStore,
coroutineScope = lifecycleScope, coroutineScope = viewLifecycleOwner.lifecycleScope,
navController = findNavController(), navController = findNavController(),
session = context.components.core.sessionManager.findSessionById(args.sessionId), session = context.components.core.sessionManager.findSessionById(args.sessionId),
sitePermissions = args.sitePermissions, sitePermissions = args.sitePermissions,

View File

@ -44,7 +44,7 @@ class SitePermissionsDetailsExceptionsFragment : PreferenceFragmentCompat() {
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
showToolbar(sitePermissions.origin) showToolbar(sitePermissions.origin)
lifecycleScope.launch(IO) { viewLifecycleOwner.lifecycleScope.launch(IO) {
val context = requireContext() val context = requireContext()
sitePermissions = sitePermissions =
requireNotNull(context.components.core.permissionStorage.findSitePermissionsBy(sitePermissions.origin)) requireNotNull(context.components.core.permissionStorage.findSitePermissionsBy(sitePermissions.origin))
@ -96,7 +96,7 @@ class SitePermissionsDetailsExceptionsFragment : PreferenceFragmentCompat() {
} }
private fun clearSitePermissions() { private fun clearSitePermissions() {
lifecycleScope.launch(IO) { viewLifecycleOwner.lifecycleScope.launch(IO) {
requireContext().components.core.permissionStorage.deleteSitePermissions(sitePermissions) requireContext().components.core.permissionStorage.deleteSitePermissions(sitePermissions)
withContext(Main) { withContext(Main) {
requireView().findNavController().popBackStack() requireView().findNavController().popBackStack()

View File

@ -108,7 +108,7 @@ class SitePermissionsExceptionsFragment :
} }
private fun deleteAllSitePermissions() { private fun deleteAllSitePermissions() {
lifecycleScope.launch(IO) { viewLifecycleOwner.lifecycleScope.launch(IO) {
requireContext().components.core.permissionStorage.deleteAllSitePermissions() requireContext().components.core.permissionStorage.deleteAllSitePermissions()
launch(Main) { launch(Main) {
showEmptyListMessage() showEmptyListMessage()

View File

@ -163,7 +163,7 @@ class SitePermissionsManageExceptionsPhoneFeatureFragment : Fragment() {
PhoneFeature.AUTOPLAY_AUDIBLE -> sitePermissions.copy(autoplayAudible = status) PhoneFeature.AUTOPLAY_AUDIBLE -> sitePermissions.copy(autoplayAudible = status)
PhoneFeature.AUTOPLAY_INAUDIBLE -> sitePermissions.copy(autoplayInaudible = status) PhoneFeature.AUTOPLAY_INAUDIBLE -> sitePermissions.copy(autoplayInaudible = status)
} }
lifecycleScope.launch(IO) { viewLifecycleOwner.lifecycleScope.launch(IO) {
requireComponents.core.permissionStorage.updateSitePermissions(updatedSitePermissions) requireComponents.core.permissionStorage.updateSitePermissions(updatedSitePermissions)
} }
} }

View File

@ -68,7 +68,7 @@ class DefaultShareController(
private val snackbar: FenixSnackbar, private val snackbar: FenixSnackbar,
private val navController: NavController, private val navController: NavController,
private val recentAppsStorage: RecentAppsStorage, private val recentAppsStorage: RecentAppsStorage,
private val lifecycleScope: CoroutineScope, private val viewLifecycleScope: CoroutineScope,
private val dismiss: (ShareController.Result) -> Unit private val dismiss: (ShareController.Result) -> Unit
) : ShareController { ) : ShareController {
@ -83,7 +83,7 @@ class DefaultShareController(
} }
override fun handleShareToApp(app: AppShareOption) { override fun handleShareToApp(app: AppShareOption) {
lifecycleScope.launch(Dispatchers.IO) { viewLifecycleScope.launch(Dispatchers.IO) {
recentAppsStorage.updateRecentApp(app.activityName) recentAppsStorage.updateRecentApp(app.activityName)
} }

View File

@ -79,7 +79,7 @@ class ShareFragment : AppCompatDialogFragment() {
navController = findNavController(), navController = findNavController(),
sendTabUseCases = SendTabUseCases(accountManager), sendTabUseCases = SendTabUseCases(accountManager),
recentAppsStorage = RecentAppsStorage(requireContext()), recentAppsStorage = RecentAppsStorage(requireContext()),
lifecycleScope = lifecycleScope viewLifecycleScope = viewLifecycleOwner.lifecycleScope
) { result -> ) { result ->
consumePrompt { consumePrompt {
when (result) { when (result) {

View File

@ -42,8 +42,10 @@ class DefaultCollectionCreationControllerTest {
every { state.tabCollections } returns emptyList() every { state.tabCollections } returns emptyList()
every { state.tabs } returns emptyList() every { state.tabs } returns emptyList()
controller = DefaultCollectionCreationController(store, dismiss, analytics, controller = DefaultCollectionCreationController(
tabCollectionStorage, tabsUseCases, sessionManager, testCoroutineScope) store, dismiss, analytics,
tabCollectionStorage, sessionManager, testCoroutineScope
)
} }
@Test @Test

View File

@ -46,7 +46,6 @@ import org.mozilla.fenix.R
import org.mozilla.fenix.browser.BrowserAnimator import org.mozilla.fenix.browser.BrowserAnimator
import org.mozilla.fenix.browser.BrowserFragment import org.mozilla.fenix.browser.BrowserFragment
import org.mozilla.fenix.browser.BrowserFragmentDirections import org.mozilla.fenix.browser.BrowserFragmentDirections
import org.mozilla.fenix.browser.browsingmode.BrowsingModeManager
import org.mozilla.fenix.browser.readermode.ReaderModeController import org.mozilla.fenix.browser.readermode.ReaderModeController
import org.mozilla.fenix.collections.SaveCollectionStep import org.mozilla.fenix.collections.SaveCollectionStep
import org.mozilla.fenix.components.Analytics import org.mozilla.fenix.components.Analytics
@ -71,12 +70,10 @@ class DefaultBrowserToolbarControllerTest {
private var swipeRefreshLayout: SwipeRefreshLayout = mockk(relaxed = true) private var swipeRefreshLayout: SwipeRefreshLayout = mockk(relaxed = true)
private var activity: HomeActivity = mockk(relaxed = true) private var activity: HomeActivity = mockk(relaxed = true)
private var analytics: Analytics = mockk(relaxed = true) private var analytics: Analytics = mockk(relaxed = true)
private val browsingModeManager: BrowsingModeManager = mockk(relaxed = true)
private var navController: NavController = mockk(relaxed = true) private var navController: NavController = mockk(relaxed = true)
private var findInPageLauncher: () -> Unit = mockk(relaxed = true) private var findInPageLauncher: () -> Unit = mockk(relaxed = true)
private val engineView: EngineView = mockk(relaxed = true) private val engineView: EngineView = mockk(relaxed = true)
private val currentSession: Session = mockk(relaxed = true) private val currentSession: Session = mockk(relaxed = true)
private val getSupportUrl: () -> String = { "https://supportUrl.org" }
private val openInFenixIntent: Intent = mockk(relaxed = true) private val openInFenixIntent: Intent = mockk(relaxed = true)
private val currentSessionAsTab: Tab = mockk(relaxed = true) private val currentSessionAsTab: Tab = mockk(relaxed = true)
private val metrics: MetricController = mockk(relaxed = true) private val metrics: MetricController = mockk(relaxed = true)
@ -104,12 +101,10 @@ class DefaultBrowserToolbarControllerTest {
controller = DefaultBrowserToolbarController( controller = DefaultBrowserToolbarController(
activity = activity, activity = activity,
navController = navController, navController = navController,
browsingModeManager = browsingModeManager,
findInPageLauncher = findInPageLauncher, findInPageLauncher = findInPageLauncher,
engineView = engineView, engineView = engineView,
browserAnimator = browserAnimator, browserAnimator = browserAnimator,
customTabSession = null, customTabSession = null,
getSupportUrl = getSupportUrl,
openInFenixIntent = openInFenixIntent, openInFenixIntent = openInFenixIntent,
scope = scope, scope = scope,
swipeRefresh = swipeRefreshLayout, swipeRefresh = swipeRefreshLayout,
@ -118,7 +113,6 @@ class DefaultBrowserToolbarControllerTest {
bookmarkTapped = mockk(), bookmarkTapped = mockk(),
readerModeController = readerModeController, readerModeController = readerModeController,
sessionManager = mockk(), sessionManager = mockk(),
store = mockk(),
sharedViewModel = mockk() sharedViewModel = mockk()
) )
@ -200,12 +194,10 @@ class DefaultBrowserToolbarControllerTest {
controller = DefaultBrowserToolbarController( controller = DefaultBrowserToolbarController(
activity = activity, activity = activity,
navController = navController, navController = navController,
browsingModeManager = browsingModeManager,
findInPageLauncher = findInPageLauncher, findInPageLauncher = findInPageLauncher,
engineView = engineView, engineView = engineView,
browserAnimator = browserAnimator, browserAnimator = browserAnimator,
customTabSession = null, customTabSession = null,
getSupportUrl = getSupportUrl,
openInFenixIntent = openInFenixIntent, openInFenixIntent = openInFenixIntent,
scope = this, scope = this,
swipeRefresh = swipeRefreshLayout, swipeRefresh = swipeRefreshLayout,
@ -214,7 +206,6 @@ class DefaultBrowserToolbarControllerTest {
bookmarkTapped = mockk(), bookmarkTapped = mockk(),
readerModeController = mockk(), readerModeController = mockk(),
sessionManager = mockk(), sessionManager = mockk(),
store = mockk(),
sharedViewModel = mockk() sharedViewModel = mockk()
) )
@ -353,12 +344,10 @@ class DefaultBrowserToolbarControllerTest {
controller = DefaultBrowserToolbarController( controller = DefaultBrowserToolbarController(
activity = activity, activity = activity,
navController = navController, navController = navController,
browsingModeManager = browsingModeManager,
findInPageLauncher = findInPageLauncher, findInPageLauncher = findInPageLauncher,
engineView = engineView, engineView = engineView,
browserAnimator = browserAnimator, browserAnimator = browserAnimator,
customTabSession = null, customTabSession = null,
getSupportUrl = getSupportUrl,
openInFenixIntent = openInFenixIntent, openInFenixIntent = openInFenixIntent,
scope = this, scope = this,
swipeRefresh = swipeRefreshLayout, swipeRefresh = swipeRefreshLayout,
@ -367,7 +356,6 @@ class DefaultBrowserToolbarControllerTest {
bookmarkTapped = mockk(), bookmarkTapped = mockk(),
readerModeController = mockk(), readerModeController = mockk(),
sessionManager = mockk(), sessionManager = mockk(),
store = mockk(),
sharedViewModel = mockk() sharedViewModel = mockk()
) )
controller.ioScope = this controller.ioScope = this
@ -560,12 +548,10 @@ class DefaultBrowserToolbarControllerTest {
controller = DefaultBrowserToolbarController( controller = DefaultBrowserToolbarController(
activity = activity, activity = activity,
navController = navController, navController = navController,
browsingModeManager = browsingModeManager,
findInPageLauncher = findInPageLauncher, findInPageLauncher = findInPageLauncher,
engineView = engineView, engineView = engineView,
browserAnimator = browserAnimator, browserAnimator = browserAnimator,
customTabSession = currentSession, customTabSession = currentSession,
getSupportUrl = getSupportUrl,
openInFenixIntent = openInFenixIntent, openInFenixIntent = openInFenixIntent,
scope = scope, scope = scope,
swipeRefresh = swipeRefreshLayout, swipeRefresh = swipeRefreshLayout,
@ -574,7 +560,6 @@ class DefaultBrowserToolbarControllerTest {
bookmarkTapped = mockk(), bookmarkTapped = mockk(),
readerModeController = mockk(), readerModeController = mockk(),
sessionManager = mockk(), sessionManager = mockk(),
store = mockk(),
sharedViewModel = mockk() sharedViewModel = mockk()
) )
@ -602,12 +587,10 @@ class DefaultBrowserToolbarControllerTest {
controller = DefaultBrowserToolbarController( controller = DefaultBrowserToolbarController(
activity = activity, activity = activity,
navController = navController, navController = navController,
browsingModeManager = browsingModeManager,
findInPageLauncher = findInPageLauncher, findInPageLauncher = findInPageLauncher,
engineView = engineView, engineView = engineView,
browserAnimator = browserAnimator, browserAnimator = browserAnimator,
customTabSession = null, customTabSession = null,
getSupportUrl = getSupportUrl,
openInFenixIntent = openInFenixIntent, openInFenixIntent = openInFenixIntent,
scope = testScope, scope = testScope,
swipeRefresh = swipeRefreshLayout, swipeRefresh = swipeRefreshLayout,
@ -616,7 +599,6 @@ class DefaultBrowserToolbarControllerTest {
bookmarkTapped = mockk(), bookmarkTapped = mockk(),
readerModeController = mockk(), readerModeController = mockk(),
sessionManager = mockk(), sessionManager = mockk(),
store = mockk(),
sharedViewModel = mockk() sharedViewModel = mockk()
) )

View File

@ -88,7 +88,7 @@ class DefaultSessionControlControllerTest {
fragmentStore = fragmentStore, fragmentStore = fragmentStore,
navController = navController, navController = navController,
browsingModeManager = browsingModeManager, browsingModeManager = browsingModeManager,
lifecycleScope = MainScope(), viewLifecycleScope = MainScope(),
closeTab = closeTab, closeTab = closeTab,
closeAllTabs = closeAllTabs, closeAllTabs = closeAllTabs,
getListOfTabs = getListOfTabs, getListOfTabs = getListOfTabs,

View File

@ -66,7 +66,7 @@ class DefaultSearchControllerTest {
context = context, context = context,
store = store, store = store,
navController = navController, navController = navController,
lifecycleScope = lifecycleScope, viewLifecycleScope = lifecycleScope,
clearToolbarFocus = clearToolbarFocus clearToolbarFocus = clearToolbarFocus
) )
@ -96,7 +96,7 @@ class DefaultSearchControllerTest {
context = context, context = context,
store = store, store = store,
navController = navController, navController = navController,
lifecycleScope = this, viewLifecycleScope = this,
clearToolbarFocus = clearToolbarFocus clearToolbarFocus = clearToolbarFocus
) )