Split out CustomTabToolbarIntegration (#7107)
parent
b4e10965b7
commit
ea486d7c66
|
@ -26,6 +26,7 @@ import mozilla.components.support.ktx.android.util.dpToFloat
|
||||||
import org.jetbrains.anko.dimen
|
import org.jetbrains.anko.dimen
|
||||||
import org.mozilla.fenix.R
|
import org.mozilla.fenix.R
|
||||||
import org.mozilla.fenix.components.FenixSnackbar
|
import org.mozilla.fenix.components.FenixSnackbar
|
||||||
|
import org.mozilla.fenix.customtabs.CustomTabToolbarIntegration
|
||||||
import org.mozilla.fenix.customtabs.CustomTabToolbarMenu
|
import org.mozilla.fenix.customtabs.CustomTabToolbarMenu
|
||||||
import org.mozilla.fenix.ext.bookmarkStorage
|
import org.mozilla.fenix.ext.bookmarkStorage
|
||||||
import org.mozilla.fenix.ext.components
|
import org.mozilla.fenix.ext.components
|
||||||
|
@ -200,19 +201,29 @@ class BrowserToolbarView(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
toolbarIntegration = ToolbarIntegration(
|
toolbarIntegration = if (customTabSession != null) {
|
||||||
|
CustomTabToolbarIntegration(
|
||||||
|
this,
|
||||||
|
view,
|
||||||
|
menuToolbar,
|
||||||
|
customTabSession.id,
|
||||||
|
isPrivate = customTabSession.private
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
DefaultToolbarIntegration(
|
||||||
this,
|
this,
|
||||||
view,
|
view,
|
||||||
menuToolbar,
|
menuToolbar,
|
||||||
ShippedDomainsProvider().also { it.initialize(this) },
|
ShippedDomainsProvider().also { it.initialize(this) },
|
||||||
components.core.historyStorage,
|
components.core.historyStorage,
|
||||||
components.core.sessionManager,
|
components.core.sessionManager,
|
||||||
customTabSession?.id,
|
sessionId = null,
|
||||||
customTabSession?.private ?: sessionManager.selectedSession?.private ?: false,
|
isPrivate = sessionManager.selectedSession?.private ?: false,
|
||||||
interactor
|
interactor = interactor
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the correct snackbar anchor for bottom or top toolbar configuration.
|
* Returns the correct snackbar anchor for bottom or top toolbar configuration.
|
||||||
|
|
|
@ -20,8 +20,8 @@ import java.lang.ref.WeakReference
|
||||||
*/
|
*/
|
||||||
class TabCounterToolbarButton(
|
class TabCounterToolbarButton(
|
||||||
private val sessionManager: SessionManager,
|
private val sessionManager: SessionManager,
|
||||||
private val showTabs: () -> Unit,
|
private val isPrivate: Boolean,
|
||||||
private val isPrivate: Boolean
|
private val showTabs: () -> Unit
|
||||||
) : Toolbar.Action {
|
) : Toolbar.Action {
|
||||||
private var reference: WeakReference<TabCounter> = WeakReference<TabCounter>(null)
|
private var reference: WeakReference<TabCounter> = WeakReference<TabCounter>(null)
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,6 @@ import com.airbnb.lottie.LottieCompositionFactory
|
||||||
import com.airbnb.lottie.LottieDrawable
|
import com.airbnb.lottie.LottieDrawable
|
||||||
import mozilla.components.browser.domains.autocomplete.DomainAutocompleteProvider
|
import mozilla.components.browser.domains.autocomplete.DomainAutocompleteProvider
|
||||||
import mozilla.components.browser.session.SessionManager
|
import mozilla.components.browser.session.SessionManager
|
||||||
import mozilla.components.browser.session.runWithSession
|
|
||||||
import mozilla.components.browser.toolbar.BrowserToolbar
|
import mozilla.components.browser.toolbar.BrowserToolbar
|
||||||
import mozilla.components.browser.toolbar.display.DisplayToolbar
|
import mozilla.components.browser.toolbar.display.DisplayToolbar
|
||||||
import mozilla.components.concept.storage.HistoryStorage
|
import mozilla.components.concept.storage.HistoryStorage
|
||||||
|
@ -25,7 +24,46 @@ import org.mozilla.fenix.ext.components
|
||||||
import org.mozilla.fenix.ext.settings
|
import org.mozilla.fenix.ext.settings
|
||||||
import org.mozilla.fenix.theme.ThemeManager
|
import org.mozilla.fenix.theme.ThemeManager
|
||||||
|
|
||||||
class ToolbarIntegration(
|
abstract class ToolbarIntegration(
|
||||||
|
context: Context,
|
||||||
|
toolbar: BrowserToolbar,
|
||||||
|
toolbarMenu: ToolbarMenu,
|
||||||
|
sessionId: String?,
|
||||||
|
isPrivate: Boolean,
|
||||||
|
renderStyle: ToolbarFeature.RenderStyle
|
||||||
|
) : LifecycleAwareFeature {
|
||||||
|
|
||||||
|
private val toolbarPresenter: ToolbarPresenter = ToolbarPresenter(
|
||||||
|
toolbar,
|
||||||
|
context.components.core.store,
|
||||||
|
sessionId,
|
||||||
|
ToolbarFeature.UrlRenderConfiguration(
|
||||||
|
PublicSuffixList(context),
|
||||||
|
ThemeManager.resolveAttribute(R.attr.primaryText, context),
|
||||||
|
renderStyle = renderStyle
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
private var menuPresenter =
|
||||||
|
MenuPresenter(toolbar, context.components.core.sessionManager, sessionId)
|
||||||
|
|
||||||
|
init {
|
||||||
|
toolbar.display.menuBuilder = toolbarMenu.menuBuilder
|
||||||
|
toolbar.private = isPrivate
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun start() {
|
||||||
|
menuPresenter.start()
|
||||||
|
toolbarPresenter.start()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun stop() {
|
||||||
|
menuPresenter.stop()
|
||||||
|
toolbarPresenter.stop()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class DefaultToolbarIntegration(
|
||||||
context: Context,
|
context: Context,
|
||||||
toolbar: BrowserToolbar,
|
toolbar: BrowserToolbar,
|
||||||
toolbarMenu: ToolbarMenu,
|
toolbarMenu: ToolbarMenu,
|
||||||
|
@ -35,23 +73,19 @@ class ToolbarIntegration(
|
||||||
sessionId: String? = null,
|
sessionId: String? = null,
|
||||||
isPrivate: Boolean,
|
isPrivate: Boolean,
|
||||||
interactor: BrowserToolbarViewInteractor
|
interactor: BrowserToolbarViewInteractor
|
||||||
) : LifecycleAwareFeature {
|
) : ToolbarIntegration(
|
||||||
|
context = context,
|
||||||
private var renderStyle: ToolbarFeature.RenderStyle = ToolbarFeature.RenderStyle.UncoloredUrl
|
toolbar = toolbar,
|
||||||
|
toolbarMenu = toolbarMenu,
|
||||||
|
sessionId = sessionId,
|
||||||
|
isPrivate = isPrivate,
|
||||||
|
renderStyle = ToolbarFeature.RenderStyle.UncoloredUrl
|
||||||
|
) {
|
||||||
|
|
||||||
init {
|
init {
|
||||||
toolbar.display.menuBuilder = toolbarMenu.menuBuilder
|
toolbar.display.menuBuilder = toolbarMenu.menuBuilder
|
||||||
toolbar.private = isPrivate
|
toolbar.private = isPrivate
|
||||||
|
|
||||||
run {
|
|
||||||
sessionManager.runWithSession(sessionId) {
|
|
||||||
it.isCustomTabSession()
|
|
||||||
}.also { isCustomTab ->
|
|
||||||
if (isCustomTab) {
|
|
||||||
renderStyle = ToolbarFeature.RenderStyle.RegistrableDomain
|
|
||||||
return@run
|
|
||||||
}
|
|
||||||
|
|
||||||
val task = LottieCompositionFactory
|
val task = LottieCompositionFactory
|
||||||
.fromRawRes(
|
.fromRawRes(
|
||||||
context,
|
context,
|
||||||
|
@ -95,17 +129,11 @@ class ToolbarIntegration(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
val tabsAction = TabCounterToolbarButton(
|
val tabsAction = TabCounterToolbarButton(sessionManager, isPrivate) {
|
||||||
sessionManager,
|
|
||||||
{
|
|
||||||
toolbar.hideKeyboard()
|
toolbar.hideKeyboard()
|
||||||
interactor.onTabCounterClicked()
|
interactor.onTabCounterClicked()
|
||||||
},
|
}
|
||||||
isPrivate
|
|
||||||
)
|
|
||||||
toolbar.addBrowserAction(tabsAction)
|
toolbar.addBrowserAction(tabsAction)
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ToolbarAutocompleteFeature(toolbar).apply {
|
ToolbarAutocompleteFeature(toolbar).apply {
|
||||||
addDomainProvider(domainAutocompleteProvider)
|
addDomainProvider(domainAutocompleteProvider)
|
||||||
|
@ -114,27 +142,4 @@ class ToolbarIntegration(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val toolbarPresenter: ToolbarPresenter = ToolbarPresenter(
|
|
||||||
toolbar,
|
|
||||||
context.components.core.store,
|
|
||||||
sessionId,
|
|
||||||
ToolbarFeature.UrlRenderConfiguration(
|
|
||||||
PublicSuffixList(context),
|
|
||||||
ThemeManager.resolveAttribute(R.attr.primaryText, context), renderStyle = renderStyle
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
private var menuPresenter =
|
|
||||||
MenuPresenter(toolbar, context.components.core.sessionManager, sessionId)
|
|
||||||
|
|
||||||
override fun start() {
|
|
||||||
menuPresenter.start()
|
|
||||||
toolbarPresenter.start()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun stop() {
|
|
||||||
menuPresenter.stop()
|
|
||||||
toolbarPresenter.stop()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
package org.mozilla.fenix.customtabs
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import mozilla.components.browser.toolbar.BrowserToolbar
|
||||||
|
import mozilla.components.feature.toolbar.ToolbarFeature
|
||||||
|
import org.mozilla.fenix.components.toolbar.ToolbarIntegration
|
||||||
|
import org.mozilla.fenix.components.toolbar.ToolbarMenu
|
||||||
|
|
||||||
|
class CustomTabToolbarIntegration(
|
||||||
|
context: Context,
|
||||||
|
toolbar: BrowserToolbar,
|
||||||
|
toolbarMenu: ToolbarMenu,
|
||||||
|
sessionId: String,
|
||||||
|
isPrivate: Boolean
|
||||||
|
) : ToolbarIntegration(
|
||||||
|
context = context,
|
||||||
|
toolbar = toolbar,
|
||||||
|
toolbarMenu = toolbarMenu,
|
||||||
|
sessionId = sessionId,
|
||||||
|
isPrivate = isPrivate,
|
||||||
|
renderStyle = ToolbarFeature.RenderStyle.RegistrableDomain
|
||||||
|
)
|
|
@ -13,9 +13,9 @@ import androidx.navigation.Navigator
|
||||||
import io.sentry.Sentry
|
import io.sentry.Sentry
|
||||||
import org.mozilla.fenix.BuildConfig
|
import org.mozilla.fenix.BuildConfig
|
||||||
|
|
||||||
fun NavController.nav(@IdRes id: Int?, directions: NavDirections) {
|
fun NavController.nav(@IdRes id: Int?, directions: NavDirections, navOptions: NavOptions? = null) {
|
||||||
if (id == null || this.currentDestination?.id == id) {
|
if (id == null || this.currentDestination?.id == id) {
|
||||||
this.navigate(directions)
|
this.navigate(directions, navOptions)
|
||||||
} else {
|
} else {
|
||||||
recordIdException(this.currentDestination?.id, id)
|
recordIdException(this.currentDestination?.id, id)
|
||||||
}
|
}
|
||||||
|
@ -29,13 +29,12 @@ fun NavController.nav(@IdRes id: Int?, directions: NavDirections, extras: Naviga
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun NavController.nav(@IdRes id: Int?, directions: NavDirections, options: NavOptions) {
|
fun NavController.nav(
|
||||||
if (id == null || this.currentDestination?.id == id) {
|
@IdRes id: Int?,
|
||||||
this.navigate(directions, options)
|
directions: NavDirections,
|
||||||
} else {
|
navOptions: NavOptions? = null,
|
||||||
recordIdException(this.currentDestination?.id, id)
|
extras: Navigator.Extras? = null
|
||||||
}
|
) = nav(id, directions.actionId, directions.arguments, navOptions, extras)
|
||||||
}
|
|
||||||
|
|
||||||
fun NavController.nav(
|
fun NavController.nav(
|
||||||
@IdRes id: Int?,
|
@IdRes id: Int?,
|
||||||
|
|
|
@ -65,7 +65,12 @@ class CrashReporterControllerTest {
|
||||||
verify { components.analytics.metrics.track(Event.CrashReporterClosed(false)) }
|
verify { components.analytics.metrics.track(Event.CrashReporterClosed(false)) }
|
||||||
verify { components.useCases.tabsUseCases.removeTab(session) }
|
verify { components.useCases.tabsUseCases.removeTab(session) }
|
||||||
verify { components.useCases.sessionUseCases.crashRecovery.invoke() }
|
verify { components.useCases.sessionUseCases.crashRecovery.invoke() }
|
||||||
verify { navContoller.navigate(CrashReporterFragmentDirections.actionCrashReporterFragmentToHomeFragment()) }
|
verify {
|
||||||
|
navContoller.navigate(
|
||||||
|
CrashReporterFragmentDirections.actionCrashReporterFragmentToHomeFragment(),
|
||||||
|
null
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -1,28 +1,27 @@
|
||||||
package org.mozilla.fenix.ext
|
package org.mozilla.fenix.ext
|
||||||
|
|
||||||
import mozilla.components.support.test.robolectric.testContext
|
|
||||||
import org.mozilla.fenix.TestApplication
|
|
||||||
import org.junit.Test
|
|
||||||
import org.junit.runner.RunWith
|
|
||||||
import org.robolectric.RobolectricTestRunner
|
|
||||||
import org.robolectric.annotation.Config
|
|
||||||
import io.mockk.mockk
|
|
||||||
import io.mockk.spyk
|
|
||||||
import io.mockk.mockkStatic
|
|
||||||
import io.mockk.verify
|
|
||||||
import io.mockk.every
|
|
||||||
import io.mockk.Runs
|
|
||||||
import io.mockk.just
|
|
||||||
import io.mockk.confirmVerified
|
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
|
import androidx.navigation.NavController
|
||||||
|
import androidx.navigation.NavDestination
|
||||||
import androidx.navigation.NavDirections
|
import androidx.navigation.NavDirections
|
||||||
import androidx.navigation.NavOptions
|
import androidx.navigation.NavOptions
|
||||||
import androidx.navigation.fragment.NavHostFragment.findNavController
|
|
||||||
import androidx.navigation.fragment.NavHostFragment
|
|
||||||
import androidx.navigation.NavDestination
|
|
||||||
import androidx.navigation.NavController
|
|
||||||
import androidx.navigation.Navigator.Extras
|
import androidx.navigation.Navigator.Extras
|
||||||
|
import androidx.navigation.fragment.NavHostFragment
|
||||||
|
import io.mockk.Runs
|
||||||
|
import io.mockk.confirmVerified
|
||||||
|
import io.mockk.every
|
||||||
|
import io.mockk.just
|
||||||
|
import io.mockk.mockk
|
||||||
|
import io.mockk.mockkStatic
|
||||||
|
import io.mockk.spyk
|
||||||
|
import io.mockk.verify
|
||||||
|
import mozilla.components.support.test.robolectric.testContext
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
|
import org.junit.Test
|
||||||
|
import org.junit.runner.RunWith
|
||||||
|
import org.mozilla.fenix.TestApplication
|
||||||
|
import org.robolectric.RobolectricTestRunner
|
||||||
|
import org.robolectric.annotation.Config
|
||||||
|
|
||||||
@RunWith(RobolectricTestRunner::class)
|
@RunWith(RobolectricTestRunner::class)
|
||||||
@Config(application = TestApplication::class)
|
@Config(application = TestApplication::class)
|
||||||
|
@ -49,11 +48,11 @@ class FragmentTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `Test nav fun with ID and directions`() {
|
fun `Test nav fun with ID and directions`() {
|
||||||
every { (NavHostFragment.findNavController(mockFragment).navigate(navDirections)) } just Runs
|
every { (NavHostFragment.findNavController(mockFragment).navigate(navDirections, null)) } just Runs
|
||||||
|
|
||||||
mockFragment.nav(mockId, navDirections)
|
mockFragment.nav(mockId, navDirections)
|
||||||
verify { (NavHostFragment.findNavController(mockFragment).getCurrentDestination()) }
|
verify { (NavHostFragment.findNavController(mockFragment).getCurrentDestination()) }
|
||||||
verify { (NavHostFragment.findNavController(mockFragment).navigate(navDirections)) }
|
verify { (NavHostFragment.findNavController(mockFragment).navigate(navDirections, null)) }
|
||||||
confirmVerified(mockFragment)
|
confirmVerified(mockFragment)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@ class NavControllerTest {
|
||||||
fun `Nav with id and directions args`() {
|
fun `Nav with id and directions args`() {
|
||||||
navController.nav(4, navDirections)
|
navController.nav(4, navDirections)
|
||||||
verify { (navController.currentDestination) }
|
verify { (navController.currentDestination) }
|
||||||
verify { (navController.navigate(navDirections)) }
|
verify { (navController.navigate(navDirections, null)) }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -63,9 +63,8 @@ class StartSearchIntentProcessorTest {
|
||||||
verify { metrics.track(Event.SearchWidgetNewTabPressed) }
|
verify { metrics.track(Event.SearchWidgetNewTabPressed) }
|
||||||
verify {
|
verify {
|
||||||
navController.navigate(
|
navController.navigate(
|
||||||
NavGraphDirections.actionGlobalSearch(
|
NavGraphDirections.actionGlobalSearch(sessionId = null),
|
||||||
sessionId = null
|
null
|
||||||
)
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
verify { out.removeExtra(HomeActivity.OPEN_TO_SEARCH) }
|
verify { out.removeExtra(HomeActivity.OPEN_TO_SEARCH) }
|
||||||
|
|
|
@ -112,7 +112,10 @@ class BookmarkControllerTest {
|
||||||
|
|
||||||
verify {
|
verify {
|
||||||
invokePendingDeletion.invoke()
|
invokePendingDeletion.invoke()
|
||||||
navController.navigate(BookmarkFragmentDirections.actionBookmarkFragmentSelf(tree.guid))
|
navController.navigate(
|
||||||
|
BookmarkFragmentDirections.actionBookmarkFragmentSelf(tree.guid),
|
||||||
|
null
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -134,7 +137,8 @@ class BookmarkControllerTest {
|
||||||
navController.navigate(
|
navController.navigate(
|
||||||
BookmarkFragmentDirections.actionBookmarkFragmentToBookmarkEditFragment(
|
BookmarkFragmentDirections.actionBookmarkFragmentToBookmarkEditFragment(
|
||||||
item.guid
|
item.guid
|
||||||
)
|
),
|
||||||
|
null
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -168,12 +172,12 @@ class BookmarkControllerTest {
|
||||||
@Test
|
@Test
|
||||||
fun `handleBookmarkSharing should navigate to the 'Share' fragment`() {
|
fun `handleBookmarkSharing should navigate to the 'Share' fragment`() {
|
||||||
val navDirectionsSlot = slot<NavDirections>()
|
val navDirectionsSlot = slot<NavDirections>()
|
||||||
every { navController.navigate(capture(navDirectionsSlot)) } just Runs
|
every { navController.navigate(capture(navDirectionsSlot), null) } just Runs
|
||||||
|
|
||||||
controller.handleBookmarkSharing(item)
|
controller.handleBookmarkSharing(item)
|
||||||
|
|
||||||
verify {
|
verify {
|
||||||
navController.navigate(navDirectionsSlot.captured)
|
navController.navigate(navDirectionsSlot.captured, null)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,8 +13,8 @@ import io.mockk.Runs
|
||||||
import io.mockk.every
|
import io.mockk.every
|
||||||
import io.mockk.just
|
import io.mockk.just
|
||||||
import io.mockk.mockk
|
import io.mockk.mockk
|
||||||
import io.mockk.verify
|
|
||||||
import io.mockk.mockkObject
|
import io.mockk.mockkObject
|
||||||
|
import io.mockk.verify
|
||||||
import mozilla.components.browser.search.SearchEngine
|
import mozilla.components.browser.search.SearchEngine
|
||||||
import mozilla.components.browser.search.SearchEngineManager
|
import mozilla.components.browser.search.SearchEngineManager
|
||||||
import mozilla.components.browser.session.Session
|
import mozilla.components.browser.session.Session
|
||||||
|
@ -23,9 +23,9 @@ import org.junit.Test
|
||||||
import org.junit.runner.RunWith
|
import org.junit.runner.RunWith
|
||||||
import org.mozilla.fenix.BrowserDirection
|
import org.mozilla.fenix.BrowserDirection
|
||||||
import org.mozilla.fenix.FenixApplication
|
import org.mozilla.fenix.FenixApplication
|
||||||
import org.mozilla.fenix.TestApplication
|
|
||||||
import org.mozilla.fenix.HomeActivity
|
import org.mozilla.fenix.HomeActivity
|
||||||
import org.mozilla.fenix.R
|
import org.mozilla.fenix.R
|
||||||
|
import org.mozilla.fenix.TestApplication
|
||||||
import org.mozilla.fenix.ext.metrics
|
import org.mozilla.fenix.ext.metrics
|
||||||
import org.mozilla.fenix.ext.searchEngineManager
|
import org.mozilla.fenix.ext.searchEngineManager
|
||||||
import org.mozilla.fenix.ext.settings
|
import org.mozilla.fenix.ext.settings
|
||||||
|
@ -264,9 +264,10 @@ class SearchInteractorTest {
|
||||||
verify {
|
verify {
|
||||||
navController.navigate(
|
navController.navigate(
|
||||||
SearchFragmentDirections.actionSearchFragmentToBrowserFragment(
|
SearchFragmentDirections.actionSearchFragmentToBrowserFragment(
|
||||||
|
activeSessionId = null
|
||||||
|
),
|
||||||
null
|
null
|
||||||
)
|
)
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,7 +62,10 @@ class AccountSettingsInteractorTest {
|
||||||
interactor.onSignOut()
|
interactor.onSignOut()
|
||||||
|
|
||||||
verify {
|
verify {
|
||||||
navController.navigate(AccountSettingsFragmentDirections.actionAccountSettingsFragmentToSignOutFragment())
|
navController.navigate(
|
||||||
|
AccountSettingsFragmentDirections.actionAccountSettingsFragmentToSignOutFragment(),
|
||||||
|
null
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue