diff --git a/app/src/main/java/org/mozilla/fenix/settings/quicksettings/ConnectionDetailsController.kt b/app/src/main/java/org/mozilla/fenix/settings/quicksettings/ConnectionDetailsController.kt
index 4e978c725b..58c6f4fc83 100644
--- a/app/src/main/java/org/mozilla/fenix/settings/quicksettings/ConnectionDetailsController.kt
+++ b/app/src/main/java/org/mozilla/fenix/settings/quicksettings/ConnectionDetailsController.kt
@@ -9,10 +9,8 @@ import androidx.fragment.app.Fragment
import androidx.navigation.NavController
import mozilla.components.browser.state.state.SessionState
import mozilla.components.concept.engine.permission.SitePermissions
-import org.mozilla.fenix.R
import org.mozilla.fenix.browser.BrowserFragmentDirections
import org.mozilla.fenix.ext.components
-import org.mozilla.fenix.ext.nav
import org.mozilla.fenix.ext.runIfFragmentIsAttached
/**
@@ -36,7 +34,7 @@ interface ConnectionDetailsController {
class DefaultConnectionDetailsController(
private val context: Context,
private val fragment: Fragment,
- private val navController: NavController,
+ private val navController: () -> NavController,
internal var sitePermissions: SitePermissions?,
private val gravity: Int,
private val getCurrentTab: () -> SessionState?,
@@ -46,7 +44,7 @@ class DefaultConnectionDetailsController(
getCurrentTab()?.let { tab ->
context.components.useCases.trackingProtectionUseCases.containsException(tab.id) { contains ->
fragment.runIfFragmentIsAttached {
- dismiss()
+ navController().popBackStack()
val isTrackingProtectionEnabled = tab.trackingProtection.enabled && !contains
val directions =
BrowserFragmentDirections.actionGlobalQuickSettingsSheetDialogFragment(
@@ -60,7 +58,7 @@ class DefaultConnectionDetailsController(
permissionHighlights = tab.content.permissionHighlights,
isTrackingProtectionEnabled = isTrackingProtectionEnabled
)
- navController.nav(R.id.quickSettingsSheetDialogFragment, directions)
+ navController().navigate(directions)
}
}
}
diff --git a/app/src/main/java/org/mozilla/fenix/settings/quicksettings/ConnectionPanelDialogFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/quicksettings/ConnectionPanelDialogFragment.kt
index 021e3a8cf9..b98c8df42e 100644
--- a/app/src/main/java/org/mozilla/fenix/settings/quicksettings/ConnectionPanelDialogFragment.kt
+++ b/app/src/main/java/org/mozilla/fenix/settings/quicksettings/ConnectionPanelDialogFragment.kt
@@ -37,7 +37,7 @@ class ConnectionPanelDialogFragment : FenixDialogFragment() {
val controller = DefaultConnectionDetailsController(
context = requireContext(),
fragment = this,
- navController = findNavController(),
+ navController = { findNavController() },
sitePermissions = args.sitePermissions,
gravity = args.gravity,
getCurrentTab = ::getCurrentTab,
diff --git a/app/src/main/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsController.kt b/app/src/main/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsController.kt
index b1bf6d74af..a35a673a0d 100644
--- a/app/src/main/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsController.kt
+++ b/app/src/main/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsController.kt
@@ -16,12 +16,11 @@ import mozilla.components.feature.session.SessionUseCases.ReloadUrlUseCase
import mozilla.components.feature.tabs.TabsUseCases.AddNewTabUseCase
import mozilla.components.support.base.feature.OnNeedToRequestPermissions
import mozilla.components.support.ktx.kotlin.getOrigin
-import org.mozilla.fenix.R
+import org.mozilla.fenix.NavGraphDirections
import org.mozilla.fenix.components.PermissionStorage
import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.metrics
-import org.mozilla.fenix.ext.nav
import org.mozilla.fenix.settings.PhoneFeature
import org.mozilla.fenix.settings.quicksettings.ext.shouldBeEnabled
import org.mozilla.fenix.settings.toggle
@@ -101,7 +100,7 @@ class DefaultQuickSettingsController(
private val quickSettingsStore: QuickSettingsFragmentStore,
private val browserStore: BrowserStore,
private val ioScope: CoroutineScope,
- private val navController: NavController,
+ private val navController: () -> NavController,
@VisibleForTesting
internal val sessionId: String,
@VisibleForTesting
@@ -198,21 +197,21 @@ class DefaultQuickSettingsController(
}
override fun handleBlockedItemsClicked() {
- dismiss.invoke()
+ navController().popBackStack()
val state = quickSettingsStore.state.trackingProtectionState
- val directions = QuickSettingsSheetDialogFragmentDirections
+ val directions = NavGraphDirections
.actionGlobalTrackingProtectionPanelDialogFragment(
sessionId = sessionId,
url = state.url,
trackingProtectionEnabled = state.isTrackingProtectionEnabled,
gravity = context.components.settings.toolbarPosition.androidGravity
)
- navController.nav(R.id.quickSettingsSheetDialogFragment, directions)
+ navController().navigate(directions)
}
override fun handleConnectionDetailsClicked() {
- dismiss.invoke()
+ navController().popBackStack()
val state = quickSettingsStore.state.webInfoState
val directions = ConnectionPanelDialogFragmentDirections
@@ -225,7 +224,7 @@ class DefaultQuickSettingsController(
gravity = context.components.settings.toolbarPosition.androidGravity,
sitePermissions = sitePermissions
)
- navController.nav(R.id.quickSettingsSheetDialogFragment, directions)
+ navController().navigate(directions)
}
/**
@@ -270,6 +269,6 @@ class DefaultQuickSettingsController(
private fun navigateToManagePhoneFeature(phoneFeature: PhoneFeature) {
val directions = QuickSettingsSheetDialogFragmentDirections
.actionGlobalSitePermissionsManagePhoneFeature(phoneFeature)
- navController.navigate(directions)
+ navController().navigate(directions)
}
}
diff --git a/app/src/main/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsSheetDialogFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsSheetDialogFragment.kt
index f9f0c644fc..539cbfb81c 100644
--- a/app/src/main/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsSheetDialogFragment.kt
+++ b/app/src/main/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsSheetDialogFragment.kt
@@ -80,7 +80,7 @@ class QuickSettingsSheetDialogFragment : FenixDialogFragment() {
quickSettingsStore = quickSettingsStore,
browserStore = components.core.store,
ioScope = viewLifecycleOwner.lifecycleScope + Dispatchers.IO,
- navController = findNavController(),
+ navController = { findNavController() },
sessionId = args.sessionId,
sitePermissions = args.sitePermissions,
settings = components.settings,
diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml
index c4578f00c4..f492e2addd 100644
--- a/app/src/main/res/navigation/nav_graph.xml
+++ b/app/src/main/res/navigation/nav_graph.xml
@@ -208,9 +208,6 @@
-
())
}
}
}
diff --git a/app/src/test/java/org/mozilla/fenix/settings/quicksettings/DefaultQuickSettingsControllerTest.kt b/app/src/test/java/org/mozilla/fenix/settings/quicksettings/DefaultQuickSettingsControllerTest.kt
index 3ea1c4b819..2c37af1d10 100644
--- a/app/src/test/java/org/mozilla/fenix/settings/quicksettings/DefaultQuickSettingsControllerTest.kt
+++ b/app/src/test/java/org/mozilla/fenix/settings/quicksettings/DefaultQuickSettingsControllerTest.kt
@@ -37,14 +37,13 @@ import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import org.mozilla.fenix.R
import org.mozilla.fenix.components.PermissionStorage
import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.components.metrics.MetricController
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.directionsEq
import org.mozilla.fenix.ext.metrics
-import org.mozilla.fenix.ext.nav
+import org.mozilla.fenix.ext.navigateBlockingForAsyncNavGraph
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
import org.mozilla.fenix.settings.PhoneFeature
import org.mozilla.fenix.settings.quicksettings.ext.shouldBeEnabled
@@ -101,7 +100,7 @@ class DefaultQuickSettingsControllerTest {
browserStore = browserStore,
sessionId = tab.id,
ioScope = coroutinesScope,
- navController = navController,
+ navController = { navController },
sitePermissions = sitePermissions,
settings = appSettings,
permissionStorage = permissionStorage,
@@ -177,7 +176,7 @@ class DefaultQuickSettingsControllerTest {
quickSettingsStore = store,
browserStore = BrowserStore(),
ioScope = coroutinesScope,
- navController = navController,
+ navController = { navController },
sessionId = "123",
sitePermissions = null,
settings = appSettings,
@@ -357,7 +356,7 @@ class DefaultQuickSettingsControllerTest {
}
@Test
- fun `handleBlockedItemsClicked should call dismiss and navigate to the tracking protection panel dialog`() {
+ fun `handleBlockedItemsClicked should call popBackStack and navigate to the tracking protection panel dialog`() {
every { context.components.core.store } returns browserStore
every { context.components.settings } returns appSettings
every { context.components.settings.toolbarPosition.androidGravity } returns mockk(relaxed = true)
@@ -375,22 +374,14 @@ class DefaultQuickSettingsControllerTest {
controller.handleBlockedItemsClicked()
verify {
- dismiss.invoke()
-
- navController.nav(
- R.id.quickSettingsSheetDialogFragment,
- QuickSettingsSheetDialogFragmentDirections.actionGlobalTrackingProtectionPanelDialogFragment(
- sessionId = tab.id,
- url = state.url,
- trackingProtectionEnabled = state.isTrackingProtectionEnabled,
- gravity = context.components.settings.toolbarPosition.androidGravity
- )
- )
+ navController.popBackStack()
+
+ navController.navigateBlockingForAsyncNavGraph(any())
}
}
@Test
- fun `WHEN handleConnectionDetailsClicked THEN call dismiss and navigate to the connection details dialog`() {
+ fun `WHEN handleConnectionDetailsClicked THEN call popBackStack and navigate to the connection details dialog`() {
every { context.components.core.store } returns browserStore
every { context.components.settings } returns appSettings
every { context.components.settings.toolbarPosition.androidGravity } returns mockk(relaxed = true)
@@ -407,19 +398,9 @@ class DefaultQuickSettingsControllerTest {
controller.handleConnectionDetailsClicked()
verify {
- dismiss.invoke()
-
- navController.nav(
- R.id.quickSettingsSheetDialogFragment,
- QuickSettingsSheetDialogFragmentDirections.actionGlobalConnectionDetailsDialogFragment(
- sessionId = tab.id,
- url = state.websiteUrl,
- title = state.websiteTitle,
- isSecured = true,
- sitePermissions = sitePermissions,
- gravity = context.components.settings.toolbarPosition.androidGravity
- )
- )
+ navController.popBackStack()
+
+ navController.navigateBlockingForAsyncNavGraph(any())
}
}
}
diff --git a/app/src/test/java/org/mozilla/fenix/settings/quicksettings/WebsiteInfoViewTest.kt b/app/src/test/java/org/mozilla/fenix/settings/quicksettings/WebsiteInfoViewTest.kt
index 9c22a18828..e94a74b96d 100644
--- a/app/src/test/java/org/mozilla/fenix/settings/quicksettings/WebsiteInfoViewTest.kt
+++ b/app/src/test/java/org/mozilla/fenix/settings/quicksettings/WebsiteInfoViewTest.kt
@@ -88,7 +88,7 @@ class WebsiteInfoViewTest {
@Test
fun `WHEN updating on not detailed mode THEN only connection details listener should be binded`() {
- val view = WebsiteInfoView(FrameLayout(testContext), icons, interactor, isDetailsMode = false)
+ val view = spyk(WebsiteInfoView(FrameLayout(testContext), icons, interactor, isDetailsMode = false))
view.update(WebsiteInfoState(
websiteUrl = "https://mozilla.org",