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 141ad0fbf..9bbe28137 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
@@ -95,17 +95,22 @@ class DefaultQuickSettingsController(
when (permission.isBlockedByAndroid) {
true -> handleAndroidPermissionRequest(featureToggled.androidPermissionsList)
false -> {
- sitePermissions = sitePermissions!!.toggle(featureToggled).also {
- handlePermissionsChange(it)
- }
+ val permissions = sitePermissions
+ if (permissions != null) {
+ val newPermissions = permissions.toggle(featureToggled).also {
+ handlePermissionsChange(it)
+ }
- quickSettingsStore.dispatch(
- WebsitePermissionAction.TogglePermission(
- permission,
- featureToggled.getActionLabel(context, sitePermissions, settings),
- featureToggled.shouldBeEnabled(context, sitePermissions, settings)
+ quickSettingsStore.dispatch(
+ WebsitePermissionAction.TogglePermission(
+ permission,
+ featureToggled.getActionLabel(context, newPermissions, settings),
+ featureToggled.shouldBeEnabled(context, newPermissions, settings)
+ )
)
- )
+ } else {
+ navigateToManagePhoneFeature(featureToggled)
+ }
}
}
}
@@ -189,4 +194,15 @@ class DefaultQuickSettingsController(
PhoneFeature.AUTOPLAY -> defaultWebsitePermission!! // fail-fast
}
}
+
+ /**
+ * Navigate to toggle [SitePermissions] for the specified [PhoneFeature]
+ *
+ * @param phoneFeature [PhoneFeature] to toggle [SitePermissions] for.
+ */
+ private fun navigateToManagePhoneFeature(phoneFeature: PhoneFeature) {
+ val directions = QuickSettingsSheetDialogFragmentDirections
+ .actionQuickSettingsSheetDialogFragmentToSitePermissionsManagePhoneFeature(phoneFeature.id)
+ navController.navigate(directions)
+ }
}
diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml
index dd7eaacf8..c677d528a 100644
--- a/app/src/main/res/navigation/nav_graph.xml
+++ b/app/src/main/res/navigation/nav_graph.xml
@@ -596,6 +596,10 @@
android:name="gravity"
android:defaultValue="80"
app:argType="integer" />
+
()
+ val invalidSitePermissionsController = DefaultQuickSettingsController(
+ context = context,
+ quickSettingsStore = store,
+ coroutineScope = coroutinesScope,
+ navController = navController,
+ session = browserSession,
+ sitePermissions = null,
+ settings = appSettings,
+ permissionStorage = permissionStorage,
+ reload = reload,
+ addNewTab = addNewTab,
+ requestRuntimePermissions = requestPermissions,
+ reportSiteIssue = reportIssue,
+ displayPermissions = displayPermissions,
+ dismiss = dismiss
+ )
+
+ every { websitePermission.isBlockedByAndroid } returns false
+ every { navController.navigate(any()) } just Runs
+
+ invalidSitePermissionsController.handlePermissionToggled(websitePermission)
+
+ verify {
+ navController.navigate(any())
+ }
+ }
+
@Test
fun `handleAndroidPermissionGranted should update the View's state`() {
val featureGranted = PhoneFeature.CAMERA