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",