parent
1e00b88e78
commit
e6791b5c08
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -596,6 +596,10 @@
|
|||
android:name="gravity"
|
||||
android:defaultValue="80"
|
||||
app:argType="integer" />
|
||||
<action
|
||||
android:id="@+id/action_quickSettingsSheetDialogFragment_to_SitePermissionsManagePhoneFeature"
|
||||
app:destination="@id/SitePermissionsManagePhoneFeature"
|
||||
app:popUpTo="@id/quickSettingsSheetDialogFragment" />
|
||||
</dialog>
|
||||
<fragment
|
||||
android:id="@+id/accountProblemFragment"
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
package org.mozilla.fenix.settings.quicksettings
|
||||
|
||||
import androidx.navigation.NavController
|
||||
import androidx.navigation.NavDirections
|
||||
import assertk.assertAll
|
||||
import assertk.assertThat
|
||||
import assertk.assertions.isEqualTo
|
||||
|
@ -12,7 +13,9 @@ import assertk.assertions.isFailure
|
|||
import assertk.assertions.isInstanceOf
|
||||
import assertk.assertions.isSameAs
|
||||
import assertk.assertions.isTrue
|
||||
import io.mockk.Runs
|
||||
import io.mockk.every
|
||||
import io.mockk.just
|
||||
import io.mockk.mockk
|
||||
import io.mockk.mockkStatic
|
||||
import io.mockk.slot
|
||||
|
@ -137,6 +140,36 @@ class DefaultQuickSettingsControllerTest {
|
|||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `handlePermissionToggled blocked by user should navigate to site permission manager`() {
|
||||
val websitePermission = mockk<WebsitePermission.Camera>()
|
||||
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<NavDirections>()) } just Runs
|
||||
|
||||
invalidSitePermissionsController.handlePermissionToggled(websitePermission)
|
||||
|
||||
verify {
|
||||
navController.navigate(any<NavDirections>())
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `handleAndroidPermissionGranted should update the View's state`() {
|
||||
val featureGranted = PhoneFeature.CAMERA
|
||||
|
|
Loading…
Reference in New Issue